13. Quelques recettes pour faire durer le plaisir
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
- cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
- value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Modifier/supprimer la ponctuation
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgc2VzIGRvbm7DqWVzIGRhbnMgbGUgbG9naWNpZWwgZGUgc29uIGNob2l4LCBsZSBuZXR0b3lhZ2UgZGUgc2VzIGRvbm7DqWVzIHBldXQgZG9uYyBpbmNsdXJlIGRlIG5vbWJyZXVzZXMgdMOiY2hlcyBjb21tZToNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL2JvdHRsZS5wbmciIHdpZHRoPSIxNzVweCIgLz4NCjwvZGl2Pg0KLSBNb2RpZmllciBsJ2VuY29kYWdlLg0KLSBTdXBwcmltZXIgbGVzIGRvdWJsb25zLg0KLSBEaXZpc2VyIGxlcyBjZWxsdWxlcyBjb21wb3PDqWVzIGRlIHZhbGV1cnMgbXVsdGlwbGVzLiAgIA0KLSBSZWNvZGVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMuDQotIFJlcMOpcmVyIGxlcyBlcnJldXJzIGRlIHNhaXNpZSwgbGVzIHZhbGV1cnMgYWJlcnJhbnRlcy4uLg0KLSBGdXNpb25uZXIgZGVzIGZpY2hpZXJzLg0KLSBGdXNpb25uZXIgZGVzIGNvbG9ubmVzLg0KLSBBZ3LDqWdlciBkZXMgdmFsZXVycyBkZSB2YXJpYWJsZXMuDQotIENyw6llciBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkdSBmaWNoaWVyLg0KLSBUcmFuc2Zvcm1lciBsZXMgY29sb25uZXMgZW4gcmFuZ8OpZXMgKGZvcm1hdCAid2lkZSIgZW4gImxvbmciKS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjEuIEV4ZW1wbGVzIGQndXRpbGlzYXRpb24NCg0KSGFybW9uaXNlciwgc3RhbmRhcmRpc2VyLCB1bmlmb3JtaXNlci4uLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I4LmpwZykgICANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQoNCioqKg0KDQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIFtUw6lsw6ljaGFyZ2VyIGV0IGTDqXppcHBlcl0oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy9kb3dubG9hZC5odG1sKSBsZSBsb2dpY2llbCBkYW5zIHVuIGRvc3NpZXIgZGUgc29uIGNob2l4Lg0KDQotIENyw6nDqSBlbiBsYW5nYWdlIEphdmEgW2RvbmMgbsOpY2Vzc2l0ZSBsJ2luc3RhbGxhdGlvbiBkZSBKYXZhICg2NCBiaXRzIGRlIHByw6lmw6lyZW5jZSldKGh0dHBzOi8vd3d3LmphdmEuY29tL2VuL2Rvd25sb2FkLykuDQoNCi0gTmF2aWdhdGV1cnMgw6AgcHJpdmlsw6lnaWVyOiBDaHJvbWUsIE9wZXJhLCBFZGdlLiBGaXJlZm94IHBldXQgcG9zZXIgcHJvYmzDqG1lIChuZSBmb25jdGlvbm5lIHBhcyBkYW5zIElFKS4gIA0KDQotIExlIGZvbmN0aW9ubmVtZW50IGQnT3BlblJlZmluZSBwZXV0IMOqdHJlIHVuIHBldSBkw6lyb3V0YW50IGF1IGTDqXBhcnQgY2FyIGlsIG4neSBhIHBhcyBkJ2luc3RhbGxhdGlvbiBlbiBib25uZSBldCBkdWUgZm9ybWUgY29tbWUgcG91ciB1biBsb2dpY2llbCByw6lndWxpZXIuDQoNCi0gUG91ciBkw6ltYXJyZXIgbGUgbG9naWNpZWwsIGNsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgYGAgYG9wZW5yZWZpbmUuZXhlYCBgYCBvdSBgcmVmaW5lLmJhdGAuIElsIGVzdCB1dGlsZSBkZSBmYWlyZSB1biBjbGljLWRyb2l0IHN1ciBsZSBmaWNoaWVyIC5leGUgcG91ciBsJ8OpcGluZ2xlciBkYW5zIHNhIGJhcnJlIGRlIHTDomNoZXMgKHN1ciBNYWMsIGTDqXBsYWNlciBsJ2ljw7RuZSBPcGVuUmVmaW5lIGRhbnMgbGUgZG9zc2llciBkJ2FwcGxpY2F0aW9ucyBldCBkb3VibGUgY2xpcXVlciBzdXIgY2VsbGUtY2kpLg0KDQotIFVuZSBmZW7DqnRyZSBkZSBjb21tYW5kZSBub2lyZSBzJ291dnJpcmEgZXQgbGFuY2VyYSBsJ291dmVydHVyZSBkJ3VuIG9uZ2xldCBkYW5zIGxlIG5hdmlnYXRldXIgd2ViLiAgDQoNCi0gTGEgZmVuw6p0cmUgZGUgY29tbWFuZGVzIHBldXQgZW5zdWl0ZSDDqnRyZSBpZ25vcsOpZSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4yLiDDiWNyYW4gZCdhY2N1ZWlsDQoNCi0gw4AgcGFydGlyIGR1IG1lbnUgZGUgZ2F1Y2hlLCBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAgZXQgbm9uIHRhci4uLiAoY2VydGFpbmVzIGV4dGVuc2lvbnMgcGVybWV0dGVudCBsJ3VzYWdlIGQnYXV0cmVzIGZvcm1hdHMgY29tbWUgcmRmKS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxLmpwZykgIA0KDQo8L2NlbnRlcj4gIA0KDQotIERldXggZmljaGllcnMgb3UgcGx1cyBwZXV2ZW50IMOqdHJlIGltcG9ydMOpcyBlbiBtw6ptZSB0ZW1wcy4gTGVzIGxpZ25lcyBzZXJvbnQgaW1wb3J0w6llcyB1bmUgw6AgbGEgc3VpdGUgZGUgbCdhdXRyZSBzZWxvbiBsJ29yZHJlIGQnaW1wb3J0YXRpb24gKHVuZSBjb2xvbm5lIHBlcm1ldHRhbnQgZCdpZGVudGlmaWVyIGxlIGZpY2hpZXIgc291cmNlIHNlcmEgY3LDqcOpZSBhdXRvbWF0aXF1ZW1lbnQpLiANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4zLiBIaXN0b3JpcXVlIGRlcyBwcm9qZXRzDQoNCi0gTCdvbmdsZXQgYE91dnJpciB1biBwcm9qZXRgIHBlcm1ldDoNCiAgLSBEJ2FjY8OpZGVyIGV0IGQnb3V2cmlyIHRvdXMgbGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIGxvY2FsZW1lbnQuDQogIC0gRCfDqWRpdGVyIHNlcyBtw6l0YWRvbm7DqWVzLg0KICAtIEQnYWNjw6lkZXIgYXUgZG9zc2llciBkZSB0cmF2YWlsIChkw6lmaW5pIHBhciBkw6lmYXV0KSBvw7kgT3BlblJlZmluZSBzdG9ja2UgbGVzIGFyY2hpdmVzIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBwYXIgbGUgYmlhaXMgZHUgbGllbiBgUGFyY291cmlyIGxlIGRvc3NpZXIgZGUgbCdlc3BhY2UgZGUgdHJhdmFpbGAuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjMuanBnKQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW4gbm91dmVhdSBwcm9qZXQgZW4gaW1wb3J0YW50IHVuIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpJbmNpZGVudHMgbcOpdHJvLW10bC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuIC0+IFN1aXZhbnQuDQooTGUgZmljaGllciBlc3QgYXVzc2kgZGlzcG9uaWJsZSBzdXIgbGUgc2l0ZSBbRG9ubsOpZXMgb3V2ZXJ0ZXMgTW9udHLDqWFsXShodHRwczovL2Rvbm5lZXMubW9udHJlYWwuY2Evc29jaWV0ZS1kZS10cmFuc3BvcnQtZGUtbW9udHJlYWwvaW5jaWRlbnRzLWR1LXJlc2VhdS1kdS1tZXRybykpLiAgICAgDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDUuIEV4cGxvcmVyIGwnaW50ZXJmYWNlDQoNCi0gTCdpbnRlcmZhY2UgZXN0IHNpbWlsYWlyZSDDoCBFeGNlbCBtYWlzIG9uIG5lIHBldXQgdm9pciBsJ2Vuc2VtYmxlIGRlcyBsaWduZXMsIGxhICJsb2dpcXVlIiBkJ09wZW5SZWZpbmUgcmVwb3NlIHN1ciBsZSB0cmF2YWlsIGVuICoqY29sb25uZXMqKi4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGV1eCB2dWVzIGRlcyBkb25uw6llczogYGxpZ25lc2AgZXQgYGVudHLDqWVzLmAgTGVzIGRvbm7DqWVzIHNvbnQgZ8OpbsOpcmFsZW1lbnQgcHLDqXNlbnTDqWVzIGVuIG1vZGUgYGxpZ25lc2AsIGMnZXN0LcOgLWRpcmUgY2hhcXVlIGxpZ25lIHJlcHLDqXNlbnRlIHVuZSBvYnNlcnZhdGlvbi4gTGUgbW9kZSBgZW50csOpZXNgIHBlcm1ldCBkJ2Fzc29jaWVyIHBsdXNpZXVycyBsaWduZXMgw6AgdW5lIG9ic2VydmF0aW9uLg0KDQotIElsIGVzdCBkb25jIHBvc3NpYmxlIGRlIG1vZGlmaWVyIGxhIHN0cnVjdHVyZSBkdSBmaWNoaWVyIHBvdXIgcXVlIHBsdXNpZXVycyBsaWduZXMgc29pZW50IGFzc29jacOpZXMgw6AgdW4gc2V1bCBjYXMgZW4gc2UgYmFzYW50IHN1ciBsYSBjb2xvbm5lIGNsw6kgKCoqc2V1bGUgbGEgbGlnbmUgb3JpZ2luYWxlIHNlcmEgbnVtw6lyb3TDqWUqKiksIG1haXMgZG9pdCBzZSBmYWlyZSBhdmVjIHByw6ljYXV0aW9ucy4gUG91ciBsZXMgbG9naWNpZWxzIGQnYW5hbHlzZSwgbGUgZm9ybWF0ICp0aWR5KiAoYGxpZ25lc2ApIGVzdCDDoCBwcml2aWzDqWdpZXIuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjQuanBnKSANCg0KPC9jZW50ZXI+ICANCg0KMS4gTGllbiBzb3VzIGwnaWPDtG5lIHJlbnZvaSB2ZXJzIGxhIHBhZ2UgZCdhY2N1ZWlsL2ltcG9ydGF0aW9uLg0KMi4gUmVub21tZXIgbGUgbm9tIGRlIHNvbiBwcm9qZXQgZW4gdG91dCB0ZW1wcy4NCjMuIFBlcm1hbGllbiBxdWkgcGVybWV0IGRlIHJldmVuaXIgw6AgdW5lIHZ1ZSBwcsOpY2lzZSAoYWZmaWNoYWdlLCB0cmksIGZhY2V0dGVzLi4uKSBkdSBwcm9qZXQuDQo0LiBOb21icmUgZGUgbGlnbmVzL29ic2VydmF0aW9ucyBkdSBmaWNoaWVyLg0KNS4gQ2hhbmdlbWVudCBkdSBtb2RlIGxpZ25lcyBvdSBvYnNlcnZhdGlvbnMuDQo2LiBNb2RpZmllciBsZSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXMuDQo3LiBQYXNzZXIgZCd1bmUgcGFnZSDDoCBsJ2F1dHJlLg0KOC4gT3V2cmlyIHVuIG5vdXZlbCBvbmdsZXQgT3BlblJlZmluZS4NCjkuIEV4cG9ydGVyIGxlIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cy4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gRGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogY2xpcXVlciBkYW5zIHVuZSBjZWxsdWxlICpBdXRyZXMqLCDDqWRpdGVyIHNvbiBjb250ZW51IHBvdXIgKmF1dHJlKiBldCBhcHBsaXF1ZXIgw6AgbGEgY2VsbHVsZS4gDQotIERhbnMgbGEgY29sb25uZSAqUG9ydGUqLCBtb2RpZmllciBsZSBmb3JtYXQgZGUgbidpbXBvcnRlIHF1ZWxsZSBjZWxsdWxlIMOgICpOb21icmUqIGV0IGFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIGNlbGx1bGVzIGlkZW50aXF1ZXMuDQotIERhbnMgbGEgY29sb25uZSAqw4l2YWN1YXRpb24qLCBtb2RpZmllciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgIiMiIHBhciAqTm9uKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMi4gRm9ybWF0IGRlcyBkb25uw6llcyAgDQoNCg0KIyMjIyBUcm9pcyBmb3JtYXRzIGRlIGJhc2U6IA0KICAxLiBDaGHDrm5lIGRlIGNhcmFjdMOocmVzDQogIDIuIE5vbWJyZQ0KICAzLiBEYXRlIChub3JtZSBJU08tODYwMSBZWVlZLU1NLUREVEhIOk1NOlNTWikqDQogIA0KDQogIA0KIyMjIyBEZXV4IGZvcm1hdHMgZMOpY291bGFudCBkJ2FjdGlvbnM6IA0KICAtIEVycmV1ciAoZm9ybWF0IGF0dHJpYnXDqSBzdWl0ZSDDoCB1bmUgZXJyZXVyIGRlIHRyYW5zZm9ybWF0aW9uKSAgDQogIC0gTnVsbCoqDQoNCg0KDQojIyMjIERldXggYXV0cmVzIHR5cGVzIHBhcnRpY3VsaWVycyBkw6ljb3VsYW50IGRlIG1hbmlwdWxhdGlvbnMNCiAgLSBCb29sw6llbiAodmFsZXVyIGJpbmFpcmUgVCBvdSBGKQ0KICAtICpBcnJheSogKGxpc3RlIGRlIHZhbGV1cnMgc8OpcGFyw6llcyBwYXIgdW5lIHZpcmd1bGUgZW50cmUgY3JvY2hldHMgcG91dmFudCDDqnRyZSB0cmFuc2Zvcm3DqWVzKQ0KDQo8L2JyPg0KDQojIyMjIyAqIEZvcm1hdCBkYXRlDQoNCi0gU2Vsb24gbGVzIGJlc29pbnMsIGxlcyBkYXRlcyBwZXV2ZW50IMOqdHJlIHRyYWl0w6llcyBzb3VzIGZvcm1lIGRlIGB0ZXh0ZWAsIGRlIGBub21icmVgIG91IGBkYXRlYCAobGUgZm9ybWF0IGRhdGUgZXN0IHN1cnRvdXQgbsOpY2Vzc2FpcmUgcG91ciBsZXMgY2FsY3VscyBkZSBkYXRlcykuDQotIExlIGZvcm1hdCBkYXRlIHJlcG9zZSBzdXIgdW5lIHPDqXJpZSBkJ291dGlscyBldCBkZSAgc3RhbmRhcmRzIHBvdXIgcmVjb25uYWl0cmUgZXQgY29udmVydGlyIGxlcyB2YWxldXJzIG9yaWdpbmFsZXMgZW4gZGF0ZS4gDQotIFBvdXIgcXUndW5lIGNlbGx1bGUgc29pdCByZWNvbm51ZSBjb21tZSBkYXRlLCBlbGxlIHNlcmEgdHJhbnNmb3Jtw6llIGF1IGZvcm1hdCAqSVNPLTg2MDEtY29tcGxpYW50Ki4NCi0gUG9zc2libGUgZGUgbW9kaWZpZXIgY2UgZm9ybWF0IHBvdXIgcXUnaWwgc29pdCBwbHVzIGZhY2lsZW1lbnQgbGlzaWJsZSDDoCBsJ2V4cG9ydGF0aW9uLg0KDQo8L2JyPg0KDQojIyMjIyAqKiBGb3JtYXQgIm1hbnF1YW50Ig0KDQotIE9wZW5SZWZpbmUgZmFpdCB1bmUgZGlzdGluY3Rpb24gZW50cmUgbGVzICoqY2VsbHVsZXMgdmlkZXMgYXZlYyBlc3BhY2VzIGJsYW5jcyoqIChxdWkgbmUgc29udCBwYXMgdmlkZXMhKSwgbGVzICoqdmFsZXVycyB2aWRlcyoqIChjaGFpbmUgZGUgbG9uZ3VldXIgMCksIGV0IGxlcyAqKnZhbGV1cnMgIm51bGwiKiogKHR5cGUgc3DDqWNpYWwgcXVpIG4nZXN0IHBhcyB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzKS4gTGVzICp2aWRlcyogZXQgbGVzICpudWxsKiBzb250IGF1c3NpIGNvbnNpZMOpcsOpcyBjb21tZSAqQmxhbmsqLg0KLSBQbHVzaWV1cnMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMgc291cyBgRmFjZXR0ZXNgIGV0IGDDiWRpdGVyIGxlcyBjZWxsdWxlc2AgcGVybWV0dGVudCBkZSBnw6lyZXIgY2VzIHR5cGVzIGRlIHZhbGV1cnMuDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlRyYW5zZm9ybWVyIHVuZSBjb2xvbm5lIGRhdGUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IGRhdGUqKjogIA0KLSBEYW5zIGxhIGNvbG9ubmUgKkpvdXIgY2FsZW5kYWlyZSo6IGBNZW51IC0+IMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAgICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCi0gw4AgbCdpbXBvcnRhdGlvbiBkJ3VuIGZpY2hpZXIsIGNoYXF1ZSBjZWxsdWxlIHNlIHZlcnJhIGF0dHJpYnVlciB1biBmb3JtYXQuIA0KLSBQYXIgZMOpZmF1dCwgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZXN0IGRlIGZvcm1hdCBjaGHDrm5lcy4gIA0KLSBMZSBjb250ZW51IGRlcyBjZWxsdWxlcyByZWNvbm51IGNvbW1lIG51bcOpcmlxdWUgZXQgZGF0ZSBzZXJhIGRlIGNvdWxldXIgdmVydGUuICANCi0gTGUgZm9ybWF0IHBldXQgw6p0cmUgbW9kaWZpw6kgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6IEJvdXRvbiBgZWRpdGAsIGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgRmVuw6p0cmUgR1JFTC4gIA0KLSBDZSBmb3JtYXQgYXVyYSB1biBpbXBhY3Qgc3VyIGxlcyBhY3Rpb25zIHBvc3NpYmxlcy4gIA0KLSBMZSBjaGFuZ2VtZW50IGRlIGZvcm1hdCBwYXIgw6lkaXRpb24gZGlyZWN0ZSBkJ3VuZSBjZWxsdWxlIGVzdCB1bmUgb3DDqXJhdGlvbiBkaXN0aW5jdGUgZGUgbGEgdHJhbnNmb3JtYXRpb24gZHUgY29udGVudS4gTGEgcHJlbWnDqHJlIG9ww6lyYXRpb24gYXJyaXZlIHBhcmZvaXMgw6AgY2hhbmdlciBkZXMgZm9ybWF0cyBxdWUgbGEgdHJhbnNmb3JtYXRpb24gbmUgcGV1dCBmYWlyZS4NCi0gUG91ciBwbHVzIGQnaW5mb3JtYXRpb24gc3VyIGxlcyBmb3JtYXRzLCB2b2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwbG9yaW5nKS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMy4gTGEgZ2VzdGlvbiBkZXMgbGlnbmVzIGV0IGNvbG9ubmVzDQoNCiMjIyMgTGEgZ2VzdGlvbiBkZXMgY29sb25uZXMgcGV1dCBzZSBmYWlyZToNCg0KLSBTdXIgY2hhcXVlIGNvbG9ubmU6IA0KICAtIEZvbmN0aW9ucyBzb3VzIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRMOpcGxhY2VyIC4uLiAvIFJlbm9tbWVyIC8gU3VwcHJpbWVyYCAgIA0KICAtIEZvbmN0aW9ucyBzb3VzIGBBcGVyw6d1IC0+IE1hc3F1ZXIuLi4gYCAgIA0KDQo8L2JyPg0KDQotIFN1ciBsYSBjb2xvbm5lIGBUb3V0ZXNgOiAgICAgDQogIC0gYMOJZGl0ZXIgbGVzIGNvbG9ubmVzIC0+IFJldHJpZXItc3VwcHJpbWVyLCBnZXN0aW9uIGRlcyB2YWxldXJzIGNvbnPDqWN1dGl2ZXNgICAgIA0KICAtIGBBcGVyw6d1IC0+IEFmZmljaGVyLW1hc3F1ZXJgLi4uICANCg0KPC9icj4NCg0KIyMjIyBMYSBnZXN0aW9uIGRlcyBsaWduZXM6DQoNCi0gTGEgc8OpbGVjdGlvbiBkZSBsaWduZXMgcGV1dCBzZSBmYWlyZSBwYXIgbGUgYmlhaXMgZGUgZmlsdHJlcywgZmFjZXR0ZXMgZXQgYXV0cmVzIG1hbmlwdWxhdGlvbnMgcGVyc29ubmFsaXPDqWVzLiAgDQotIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBtYXJxdWVyL8OpdG9pbGVyIGRlcyBsaWduZXMgZW4gbG90IG91IGluZGl2aWR1ZWxsZW1lbnQgcHVpcyBkZSBjcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AgcG91ciBzw6lsZWN0aW9ubmVyIGxlcyBsaWduZXMgbWFycXXDqWVzIChgdHJ1ZWApLiAgDQotIE9uIHBldXQgZW5zdWl0ZSBzdXBwcmltZXIgbGVzIGxpZ25lcyBmaWx0csOpZXM6IGBUb3V0ZXMgLT4gw4lkaXRlciBsZXMgbGlnbmVzIC0+IFN1cHByaW1lciBsZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnRlc2AuICANCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqU3VwcHJpbWVyIHVuZSBjb2xvbm5lOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUeXBlIGQnaW5jaWRlbnQqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gU3VwcHJpbWVyIGNldHRlIGNvbG9ubmVgLiAgDQoNCioqU3VwcHJpbWVyIHBsdXNpZXVycyBjb2xvbm5lczogKiogIA0KLSBTdXIgbGEgY29sb25uZSAqVG91dGVzKiAtPiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IMOJZGl0ZXIvU3VwcHJpbWVyIGxlcyBjb2xvbm5lc2AgLT4gKktGUyogZXQgKkNBVCouICANCg0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDUuNC4gSGlzdG9yaXF1ZSAoVW5kby9SZWRvKQ0KDQotIFRvdXRlcyBsZXMgYWN0aW9ucyBzb250IGVucmVnaXN0csOpZXMgKGxvZyBkZSBzZXMgbWFuaXB1bGF0aW9ucykgZXQgcGV1dmVudCDDqnRyZSBhbm51bMOpZXMgZW4gcmVjdWxhbnQgw6l0YXBlIHBhciDDqXRhcGUgZGFucyBsJ2hpc3RvcmlxdWUuICANCi0gTGEgcHJlbWnDqHJlIGFjdGlvbiBkJ3VuIGhpc3RvcmlxdWUgZXN0IGxhIGNyw6lhdGlvbiBkdSBwcm9qZXQuICANCi0gUHVpc3F1ZSBsJ2hpc3RvcmlxdWUgZmFpdCBwYXJ0aWUgZHUgcHJvamV0IGVucmVnaXN0csOpIGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsLCBpbCBuZSBkaXNwYXJhaXQgcGFzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBzZXNzaW9uLiANCi0gTCdoaXN0b3JpcXVlIHBldXQgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiwgY29waWVyL2NvbGxlciBkYW5zIG5vdGVwYWQgZXQgYXBwbGlxdWVyIGRlIG5vdXZlYXUuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTkuanBnKXt3aWR0aD02MCV9DQoNCjwvY2VudGVyPiAgDQoNCioqQXR0ZW50aW9uISoqDQoNCi0gU2kgb24gcmVjdWxlIGRhbnMgbGUgdGVtcHMgZXQgcXUnb24gZmFpdCB1bmUgbW9kaWZpY2F0aW9uLCBsZXMgw6l0YXBlcyBxdWkgc3VpdmVudCBkYW5zIGwnaGlzdG9yaXF1ZSBkaXNwYXJhaXNzZW50IHBvdXIgZGUgYm9uLiAgDQoNCi0gTGVzIG1hbmlwdWxhdGlvbnMgcmVsYXRpdmVzIMOgIGwnYWZmaWNoYWdlIG5lIHNvbnQgcGFzIGVucmVnaXN0csOpZXMgZGFucyBsJ2hpc3RvcmlxdWUsIHNldWxlbWVudCBsZXMgdHJhbnNmb3JtYXRpb25zLiBMJ2VucmVnaXN0cmVtZW50IGF1dG9tYXRpcXVlIG5lIGNvbXByZW5kIGRvbmMgcGFzIGxlcyBmYWNldHRlcyBldCBmaWx0cmVzICh2dWUgZGUgbCdpbnRlcmZhY2UpIC0gcGVyZCBjZSBxdWkgbidhcHBhcmFpdCBwYXMgZGFucyBsZSBgRMOpZmFpcmUvUmVmYWlyZWAuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIGRhbnMgbGVzIGNlbGx1bGVzIGFwcGFyYWl0IGRhbnMgbCdoaXN0b3JpcXVlIG1haXMgbmUgcGV1dCDDqnRyZSBleHBvcnTDqWUuICANCg0KLSBGYWNldHRlcyBldCBmaWx0cmVzIHMnZW5yZWdpc3RyZW50IGdyw6JjZSBhdSBgcGVybWFsaWVuYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDYuIE1lbnUgZXQgZm9uY3Rpb25zDQoNCk9wZW4gUmVmaW5lIHBlcm1ldCBkZSB0cmF2YWlsbGVyIGRlICoqZGV1eCBmYcOnb25zKio6ICANCg0KDQoxLiBBdmVjIGwnZW5zZW1ibGUgZGVzICoqZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMqKiBxdWUgbCdvbiByZXRyb3V2ZSBkYW5zIGxlcyBtZW51cy4NCg0KMi4gRW4gcsOpZGlnZWFudCBzZXMgcHJvcHJlcyBbZXhwcmVzc2lvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMpIGF2ZWMgbGUgKipsYW5nYWdlIEdSRUwqKi4gIA0KDQogIC0gTcOqbWUgbG9yc3F1ZSBsJ29uIHV0aWxpc2UgbGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBpbCBlc3QgcG9zc2libGUgZCdlbiBtb2RpZmllciBsZSBmb25jdGlvbm5lbWVudCBlbiDDqWRpdGFudCBkaXJlY3RlbWVudCBsYSBzeW50YXhlIEdSRUwgY29ycmVzcG9uZGFudGUuIA0KDQo8L2JyPg0KDQojIyA2LjEuIFV0aWxpc2VyIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llczoNCg0KLSBMZSBtZW51IGV0IGwnZW5zZW1ibGUgZGUgc2VzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGFwcGFyYWlzc2VudCBlbiBjbGlxdWFudCBzdXIgbGEgZmzDqGNoZSBkZSBsJ2ludGl0dWzDqSBkZSBjaGFxdWUgY29sb25uZS4NCg0KLSBMZXMgZm9uY3Rpb25zIGRpc3BvbmlibGVzIHNvdXMgbGUgbWVudSBkZSBsYSBwcmVtacOocmUgY29sb25uZSBgVG91dGVzYCBzZSBkaXN0aW5ndWVudCBkZXMgYXV0cmVzIHB1aXNxdSdlbGxlcyBwZXJtZXR0ZW50IGQnYXBwbGlxdWVyIGRlcyBmb25jdGlvbnMgw6AgbCdlbnNlbWJsZSBkZXMgY29sb25uZXMgZHUgZmljaGllcjogTWFycXVlciwgw6l0b2lsZXIsIHN1cHByaW1lciwgbWFzcXVlci4uLg0KDQo8L2JyPg0KDQoqKk1lbnUgZXQgZm9uY3Rpb25zIGRlIGNoYXF1ZSBjb2xvbm5lLXZhcmlhYmxlKioNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjEyLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQoqKk1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2AqKg0KDQohW10oaW1hZ2VzL09SMjEuanBnKXt3aWR0aD05MCV9DQoNCjwvYnI+DQoNCioqKg0KDQojIyA2LjIuIMOJY3JpcmUgc2VzIGZvbmN0aW9ucyBhdmVjIEdSRUwNCg0KPC9icj4NCg0KRXhwcmVzc2lvbnMgc2ltaWxhaXJlcyBhdXggZm9ybXVsZXMgRXhjZWwgbWFpcyBxdWkgcydhcHBsaXF1ZW50IGF1eCBjb2xvbm5lcywgbm9uIGF1eCBjZWxsdWxlcywgZXQgcXVpIG5lIHNvbnQgcGFzIHN0b2Nrw6llcyDDoCBtw6ptZSBsZXMgZG9ubsOpZXMgbWFpcyBkYW5zIHVuIHNjcmlwdC4gIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMTQuanBnKQ0KDQo8L2JyPg0KDQoqKkxlIGxhbmdhZ2UgR1JFTCBwZXV0IHMndXRpbGlzZXIgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6KiogIA0KDQotIEVuIGNyw6lhbnQgZGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyA6IGBGYWNldHRlIC0+IEZhY2V0dGUgdGV4dHVlbGxlIHBlcnNvbm5hbGlzw6llYC4gIA0KDQotIEVuIHRyYW5zZm9ybWFudCB1bmUgY29sb25uZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHRyYW5zZm9ybWVyYCAoYXVzc2kgc291cyBgVG91dGVzIC0+IFRyYW5zZm9ybWVyYCkuICANCg0KLSBFbiBjcsOpYW50IHVuZSBub3V2ZWxsZSBjb2xvbm5lOiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgYmFzw6llIHN1ciBjZXR0ZSBjb2xvbm5lYC4gIA0KDQo8L2JyPg0KDQoqKkxlcyBmaWx0cmVzIGV0IGxlcyB0cmFuc2Zvcm1hdGlvbnMgcGx1cyBjb21wbGV4ZXMgcGV1dmVudCBhdXNzaSBuw6ljZXNzaXRlciBsJ3VzYWdlIGQnW2V4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyAocmVnZXgpXShodHRwczovL3JlZ2V4MTAxLmNvbS8pKioNCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNi4zLiBUcmllciB1biBmaWNoaWVyDQoNCi0gTGVzIGRvbm7DqWVzIGFwcGFyYWlzc2VudCBkYW5zIGwnb3JkcmUgZHUgZmljaGllciBvcmlnaW5hbC4NCi0gUG91ciBtb2RpZmllciBsJ29yZHJlIGQnYXBwYXJpdGlvbiBkZXMgb2JzZXJ2YXRpb25zLCBhcHBsaXF1ZXIgdW4gb3UgZGVzIHRyaXMgc3VyIGxlcyBjb2xvbm5lcyBhdmVjIGBUcmllci4uLmANCi0gUG91ciBjb21iaW5lciBwbHVzaWV1cnMgdHJpcyBzdXIgZGlmZsOpcmVudGVzIGNvbG9ubmVzOiBGYWlyZSB1biB0cmllIHN1ciB1bmUgY29sb25uZSBwdWlzIHN1ciB1bmUgYXV0cmUgZW4gbW9kaWZpYW50IHNpIG7DqWNlc3NhaXJlIGwnb3B0aW9uIGBUcmllciBzZWxvbiBjZXR0ZSBzZXVsZSBjb2xvbm5lYC4NCi0gTGVzIHRyaXMgbmUgc29udCBxdWUgdGVtcG9yYWlyZXMgZXQgbidhZmZlY3RlbnQgZG9uYyBxdWUgbCdhZmZpY2hhZ2UuIFBvdXIgcXUnaWxzIHNvaWVudCBwZXJtYW5lbnRzIChyZW51bcOpcm90YXRpb24gZGVzIGxpZ25lcyk6IGBUcmllciAtPiBSZXRyaWVyIGxlcyBsaWduZXMgZGUgZmHDp29uIHBlcm1hbmVudGVgKi4gIA0KLSBJbCBlc3QgcG9zc2libGUgZGUgc3VwcHJpbWVyIGV0IGQnaW52ZXJzZXIgbGUgdHJpIMOgIHBhcnRpciBkZXMgb3B0aW9ucyBzdXIgY2hhcXVlIGNvbG9ubmUgb3UgZ3LDomNlIMOgIGxhIGZvbmN0aW9uIGBUcmllcmAgZHUgaGF1dC4gIA0KDQogKkxlIHRyaSBwZXJtYW5lbnQgYWZmZWN0ZSB0b3V0IGxlIGZpY2hpZXIsIHBhcyBzZXVsZW1lbnQgbGEgdnVlIGZpbHRyw6llLiAgDQoNCiFbXShpbWFnZXMvT1I2LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlIGxhIGNvbG9ubmUgYEpvdXIgY2FsZW5kYWlyZWAgZW4gZm9ybWF0IGBkYXRlIGFudMOpY2hyb25vbG9naXF1ZWAuICANCi0gUXVlbGxlIGVzdCBsYSBkZXJuacOocmUgZGF0ZSBkJ2luY2lkZW50IGVucmVnaXN0csOpZSBkYW5zIGxlIGZpY2hpZXIgPyAgDQotIFN1cHByaW1lciBsZSB0cmkuICANCjwvZGl2Pg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGVzIGNlbGx1bGVzIGNvbW1lIHRleHRlIGRlIGxhIGNvbG9ubmUgYE1vaXMgQ2FsZW5kcmllcmAgLiAgIA0KLSBUcmllciBsZXMgdmFsZXVycyBkZXMgY2VsbHVsZXMgY29tbWUgdGV4dGUgZGUgbGEgY29sb25uZSBgSm91ciBkdSBtb2lzYC4gIA0KLSBFeHBsb3JlciBsZSByw6lzdWx0YXQuLi4gICANCi0gU3VwcHJpbWVyIGxlIHRyaSBldCByZWNvbW1hbmNlciBsYSBwcm9jw6lkdXJlIGF2ZWMgdW4gdHJpIGRlIGZvcm1hdCBub21icmUuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyA2LjQuIEZpbHRyZXIgbGUgdGV4dGUNCg0KLSBMYSBmb25jdGlvbiBgRmlsdHJlciBsZSB0ZXh0ZWAgcGVybWV0IGRlIGNoZXJjaGVyIHVuZSBvdSBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzLiAgDQotIFBlcm1ldCBkZSByZWNoZXJjaGVyIGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIGRhbnMgdW5lIGNvbG9ubmUgZXQgZGUgY29tYmluZXIgZGVzIGZpbHRyZXMgYXBwbGlxdcOpcyBzdXIgcGx1c2lldXJzIGNvbG9ubmVzIHBvdXIgcmFmZmluZXIgbGEgcmVjaGVyY2hlLiAgDQotIEZvbmN0aW9uIHBsdXMgZXhww6lkaXRpdmUgcXVlIGxlcyBmYWNldHRlcyBxdWFuZCBvbiBuZSB2ZXV0IHF1ZSBjaGVyY2hlciB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzLiAgDQotIEwnYWZmaWNoYWdlIGRlcyBsaWduZXMgc2UgbGltaXRlcmEgYXUgbm9tYnJlIGRlIGNhcyBjb3JyZXNwb25kYW50cyBhdXggY3JpdMOocmVzIGRlIHJlY2hlcmNoZSBpbnNjcml0cyBkYW5zIGxlcyBib2l0ZXMgZGUgZmlsdHJlcy4gIA0KLSAqKlRhbnQgcXVlIGxlcyBmaWx0cmVzIHNlcm9udCBhY3RpZnMsIGxlcyBhY3Rpb25zIHN1YnPDqXF1ZW50ZXMgc2UgbGltaXRlcm9udCDDoCBjZXMgY2FzIGZpbHRyw6lzLioqICANCg0KIVtdKGltYWdlcy9PUjcuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gRmlsdHJlciBsZSB0ZXh0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KjogImJlcnJpIiAgDQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkhldXJlIGRlIGwnaW5jaWRlbnQqOiAiMTIiICANCi0gRXhwbG9yZXIgbGVzIHLDqXN1bHRhdHMgIA0KLSBDb21tZW50IHMnYXNzdXJlciBkJ2F2b2lyIHNldWxlbWVudCBsZXMgY2FzIHN1cnZlbnVzIGVudHJlIDEyaCBldCAxM2g/IENvbWJpZW4gZGUgbGlnbmVzIGNvcnJlc3BvbmRlbnQgw6AgY2VzIGNvbmRpdGlvbnM/XlsxMjogb3UgZXhwcmVzc2lvbiByYXRpb25uZWxsZSBeMTJdICANCi0gU3VwcHJpbWVyIHRvdXMgbGVzIGZpbHRyZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyA3LiBMZXMgZmFjZXR0ZXMNCg0KIyMgNy4xIENhcmFjdMOpcmlzdGlxdWVzDQoNCjxkaXYgY2xhc3MgPSAicmlnaHQiPg0KPGltZyBzcmM9ImltYWdlcy9PUjM0LmpwZyIgIHdpZHRoPSI2MCUiIC8+DQo8L2Rpdj4NCg0KLSBMZXMgZmFjZXR0ZXMgY29uc3RpdHVlbnQgbGEgbWFycXVlIGRlIGNvbW1lcmNlIGQnT3BlblJlZmluZSwgZCdvw7kgbGUgbG9nbyEgDQoNCi0gRm9uY3Rpb25uYWxpdMOpIHB1aXNzYW50ZSBxdWkgcGVybWV0IGQnZXhwbG9yZXIgZXQgZGUgZmlsdHJlciBzZXMgZG9ubsOpZXMgZW4gZm9uY3Rpb24gZGUgZGlmZsOpcmVudGVzIGNvbmRpdGlvbnMuICANCg0KLSBOJ2FmZmVjdGVudCBwYXMgZGlyZWN0ZW1lbnQgbGVzIGRvbm7DqWVzLCBzZXVsZW1lbnQgbGEgcHLDqXNlbnRhdGlvbi4gIA0KDQotIMOAIGxhIGJhc2UsIHVuZSBmYWNldHRlIGNvcnJlc3BvbmQgw6AgbGEgbGlzdGUgZGVzIHZhbGV1cnMgcG9zc2libGVzIGQndW5lIHZhcmlhYmxlICAoZXQgZGUgbGV1ciBvY2N1cnJlbmNlKSBwcsOpc2VudMOpZSBzZWxvbiBsZSBmb3JtYXQgKGNoYWluZSwgbnVtw6lyaXF1ZSwgZGF0ZSkuICANCg0KLSBQZXJtZXR0ZW50IHVuZSBleHBsb3JhdGlvbiBldCBtYW5pcHVsYXRpb24gZGVzIHZhbGV1cnMgcG9zc2libGVzIGV0IGRlIGxldXJzIGNhcyBjb3JyZXNwb25kYW50cyBwbHVzIMOpbGFib3LDqWVzIHF1ZSBsZXMgZmlsdHJlcy4gIA0KDQotIE9uIHBldXQgYWluc2kgaWRlbnRpZmllciBsZXMgdGVuZGFuY2VzLCBsZXMgcsOpZ3VsYXJpdMOpcywgbGVzIGVycmV1cnMsIGxlcyDDqWNhcnRzLCBsZXMgcsOpcMOpdGl0aW9ucyBldCAgY2libGVyIGxlcyB2YWxldXJzIGRlIHNvdXMtZ3JvdXBlcyBwcsOpY2lzLiAgDQoNCi0gQ2VzIHNvdXMtZ3JvdXBlcyBwZXV2ZW50IGVuc3VpdGUgw6p0cmUgw6lkaXTDqXMgZXQgZXhwb3J0w6lzIChib3V0b24gYEV4cG9ydGVyYCBlbiBoYXV0IMOgIGRyb2l0ZSkuIA0KDQo8L2JyPg0KDQojIyMgRGV1eCB0eXBlcyBkZSBmYWNldHRlczoNCg0KICAtIExlcyBmYWNldHRlcyBhdXRvbWF0aXPDqWVzICoqWzFdKiouICAgDQogIDwvYnI+DQogIC0gTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAqKlsyXSoqLiAgDQogIDwvYnI+DQogICAgLSBJbCBlc3QgYXVzc2kgcG9zc2libGUgZGUgY3LDqWVyIHNlcyBwcm9wcmVzIGZhY2V0dGVzIGdyw6JjZSBhdSBsYW5nYWdlIEdSRUwgcG91ciBkw6lmaW5pciBkZXMgY29uZGl0aW9ucyBkZSBzw6lsZWN0aW9uL2ZpbHRyZSB0csOocyBwcsOpY2lzZXMgKipbM10qKiAob24gcGFybGUgZW5jb3JlIGljaSBkZSAqZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzKiwgbWFpcyBlbGxlcyBkb2l2ZW50IMOqdHJlIHLDqWRpZ8OpZXMgbWFudWVsbGVtZW50KS4NCg0KPC9icj4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMjMuanBnKQ0KDQo8L2NlbnRlcj4gIA0KICAgIC0gKipbOF0qKiBMZSBsaWVuIGBjaGFuZ2VyYCBwZXJtZXQgZCdvdXZyaXIgdW5lIGZlbsOqdHJlIGQnw6lkaXRpb24gR1JFTCBwb3VyIG1vZGlmaWVyIGxhIHN5bnRheGUgZGUgbGEgZmFjZXR0ZS4gIA0KICAgIC0gKipbOV0qKiBQb3VyIHN1cHByaW1lciBsZXMgZmFjZXR0ZXMsIGNsaXF1ZXIgc3VyIGxlIHggZGUgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHN1cHByaW1lcmAuICANCiAgICAtIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQogICAgLSAqKlsxMF0qKiBPcHRpb24gYEdyb3VwZWA6IE91dGlscyBwcm9wb3NhbnQgZGlmZsOpcmVudHMgYWxnb3JpdGhtZXMgZGUgc2ltaWxhcml0w6kgcGVybWV0dGFudCBkZSByZWdyb3VwZXIgZGVzIGNhdMOpZ29yaWVzIHNlbWJsYWJsZXMuICANCg0KDQojIyMgVHJvaXMgZm9ybWF0cyBkZSBmYWNldHRlczoNCg0KT24gcmV0cm91dmUgw6lnYWxlbWVudCBkaWZmw6lyZW50cyAqKmZvcm1hdHMgZGUgZmFjZXR0ZXMqKiAtPiB1bmUgcG91ciBjaGFxdWUgZm9ybWF0IGRlIGRvbm7DqWVzIChMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIHByb3Bvc2VudCBhdXNzaSBkZXMgZmFjZXR0ZXMgYm9vbMOpZW5uZXMpLiAgIA0KDQoNCiMjIyMgMS4gRmFjZXR0ZSB0ZXh0dWVsbGUgKipbNC01XSoqIA0KDQotIFR5cGUgZGUgZmFjZXR0ZSBsZSBwbHVzIHNvdXZlbnQgdXRpbGlzw6kuICAgDQotIFJlZ3JvdXBlbnQgZGFucyBsYSBmZW7DqnRyZSBkZSBnYXVjaGUgbGVzIHZhbGV1cnMgZGlzdGluY3RlcyAodGV4dHVlbGxlcyBvdSBudW3DqXJpcXVlcykgZGVzIGNvbG9ubmVzIHZvdWx1ZXMuICAgDQogIC0gT24gcGV1dCBmYWlyZSB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIHVuZSBjb2xvbm5lIG51bcOpcmlxdWUgbWFpcyBwYXMgbCdpbnZlcnNlLiAgDQogIC0gMjAwMCB2YWxldXJzIG1heGltdW0gcGFyIGTDqWZhdXQgbWFpcyBwZXV0IMOqdHJlIG1vZGlmacOpIGRhbnMgbGVzIHByw6lmw6lyZW5jZXMuIFNpIGxlcyB2YWxldXJzIHNvbnQgdHJvcCBub21icmV1c2VzLCBlbGxlcyBuZSBzZXJvbnQgcGFzIGxpc3TDqWVzICh1biBmaWx0cmUgcG91cnJhaXQgw6p0cmUgdXRpbGlzw6kpLiANCi0gUGVybWV0dGVudCBkZSBjb21iaW5lciBkaWZmw6lyZW50cyBmaWx0cmVzIGVuIHPDqWxlY3Rpb25uYW50IGRpZmbDqXJlbnRlcyB2YWxldXJzIGQndW5lIG91IHBsdXNpZXVycyB2YXJpYWJsZXMgKGV0IGxldXJzIGNhcyBjb3JyZXNwb25kYW50cykuICAgDQogIC0gQ2xpcXVlciBgaW5jbHVyZWAgb3UgYGV4Y2x1cmVgIHBvdXIgc8OpbGVjdGlvbm5lciBvdSBzdXBwcmltZXIgZGVzIGNob2l4IG11bHRpcGxlcyAqKlsxMl0qKi4gICANCiAgLSBVbmUgZm9pcyBsYSBzw6lsZWN0aW9uIGZhaXRlLCBsJ29wdGlvbiBgaW52ZXJzZXJgIHBlcm1ldCBkZSBzw6lsZWN0aW9ubmVyIHRvdXQgU0FVRiBsYSBzw6lsZWN0aW9uICoqWzExXSoqLiAgIA0KICAtIFBldXZlbnQgw6p0cmUgdHJpw6llcyBzZWxvbiBsZSBub20gb3UgbGUgY29tcHRlIChub21icmUgZCdvY2N1cnJlbmNlcykuICAgDQotIFBlcm1ldHRlbnQgKipk4oCZw6lkaXRlciBsZXMgdmFsZXVycyoqIChjb250ZW51IGRlIGNoYXF1ZSBjZWxsdWxlIGNvcnJlc3BvbmRhbnRlKSAqKlsxM10qKi4gIA0KDQoNCiMjIyMgMi4gRmFjZXR0ZSBudW3DqXJpcXVlICoqWzddKioNCg0KLSBWaXN1YWxpc2VyIGV0IHPDqWxlY3Rpb25uZXIgbGVzIHZhbGV1cnMgZOKAmXVuZSB2YXJpYWJsZSBudW3DqXJpcXVlIGFsbGFudCBkZSBsYSBwbHVzIHBldGl0ZSDDoCBsYSBwbHVzIGdyYW5kZS4gIA0KDQoNCiMjIyMgMy4gRmFjZXR0ZSBjaHJvbm9sb2dpcXVlICoqWzZdKioNCg0KLSBWaXN1YWxpc2VyIGV0IHPDqWxlY3Rpb25uZXIgbGVzIHZhbGV1cnMgZOKAmXVuZSBjb2xvbm5lIGRhdGUgZW4gbGlnbmUgZHUgdGVtcHMuICANCg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQoqKkZpbHRyZXIqKiANCg0KLSBFeHBsb3JlciBsZXMgdmFsZXVycyBkZSBsYSB2YXJpYWJsZSAqQ2F1c2UgcHJpbWFpcmUqLiBRdWVsbGUgZXN0IGxhIGRldXhpw6htZSBwbHVzIGZyw6lxdWVudGU/IA0KLSBRdWVsbGVzIHNvbnQgbGVzIGNhdMOpZ29yaWVzIGRlICpDYXVzZSBzZWNvbmRhaXJlKiByZWxpw6llcyDDoCBsYSAqQ2F1c2UgcHJpbWFpcmUgIkNsaWVudMOobGUiKj8gICANCi0gUXVlbGxlIGVzdCBsYSBwbHVzIGZyw6lxdWVudGU/IFPDqWxlY3Rpb25uZXIgY2V0dGUgdmFsZXVyLiBDb21iaWVuIGRlIGNhcyBjb3JyZXNwb25kZW50IMOgIGNldHRlIHPDqWxlY3Rpb24/ICANCi0gw4AgcXVlbCAqam91ciBkZSBsYSBzZW1haW5lKiBjZXR0ZSBjYXVzZSBlc3QtZWxsZSBzdXJ2ZW51ZSBsZSBwbHVzIHNvdXZlbnQ/XltDbGllbnTDqGxlIC8gQmxlc3PDqWUgb3UgbWFsYWRlLCBNw6lmYWl0IHZvbG9udGFpcmUsIE51aXNhbmNlIGludm9sb250YWlyZSAvIE3DqWZhaXQgdm9sb250YWlyZSA3ODEvIDVdICAgDQotIFLDqWluaXRpYWxpc2VyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQoNCioqw4lkaXRlcioqICANCg0KLSBEYW5zIGxhIGZhY2V0dGUgKkNhdXNlIHByaW1haXJlKiwgcmVub21tZXIgbGEgdmFsZXVyICNORCAtPiBOQS4gIA0KLSBDb3JyaWdlciBsYSB2YWxldXIgImF1dHJlIiBwb3VyIHF1J2VsbGUgc29pdCBmdXNpb25uw6llIMOgIGxhIHZhbGV1ciAiQXV0cmVzIi4gIA0KLSBTdXBwcmltZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKkZpbHRyZXIqKiANCg0KLSBRdWVsIGVzdCBsZSAqc3ltcHRvbWUqIGxlIHBsdXMgZnLDqXF1ZW50PyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gIA0KLSBTdXIgcXVlbGxlICpMaWduZSogY2UgKnN5bXB0b21lKiBzJ2VzdCBwcm9kdWl0IGxlIHBsdXMgc291dmVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gQ2VzIMOpdsOpbmVtZW50cyBvbnQtaWxzIG7DqWNlc3NpdMOpIHVuZSAqw6l2YWN1YXRpb24qP15bQ2xpZW50w6hsZSAvIExpZ25lIG9yYW5nZSAvIE91aSAxN10gICAgIA0KDQoqKsOJZGl0ZXIqKiAgDQotIMOJZGl0ZXIgbGEgdmFyaWFibGUgKsOpdmFjdWF0aW9uKiBkZSBmYcOnb24gw6AgY2UgcXUnaWwgbid5IGFpdCBxdWUgKipkZXV4IHZhbGV1cnMqKiBwb3NzaWJsZXM6IE91aSBldCBOb24uICANCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA3LjIuIExlcyByZWdyb3VwZW1lbnRzIChjbHVzdGVyaW5nKQ0KDQotIEZvbmN0aW9uIHF1aSBwZXJtZXQgZCdpZGVudGlmaWVyIGRhbnMgdW5lIGNvbG9ubmUgbGVzIHZhbGV1cnMgZGlzdGluY3RlcyBxdWkgcG91cnJhaWVudCBhdm9pciBsYSBtw6ptZSBzaWduaWZpY2F0aW9uIG91IHF1aSBwb3VycmFpZW50IMOqdHJlIHJlZ3JvdXDDqWVzIGRhbnMgdW5lIG3Dqm1lIGNhdMOpZ29yaWUgPSAidmFyaWF0aW9ucyBzdXIgbGUgbcOqbWUgdGjDqG1lIiDDqXZhbHXDqWVzIGVuIGZvbmN0aW9uIGRlIFtkaWZmw6lyZW50cyBhbGdvcml0aG1lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0NsdXN0ZXJpbmctSW4tRGVwdGgpLiANCg0KLSBDaGFxdWUgc3VnZ2VzdGlvbiBkb2l0IMOqdHJlIGFwcHJvdXbDqWUgaW5kaXZpZHVlbGxlbWVudCBwb3VyIHF1ZSBsZXMgbW9kaWZpY2F0aW9ucyBzJ2FwcGxpcXVlbnQgKGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBuZSBzb250IHBhcyBuw6ljZXNzYWlyZW1lbnQgcGVydGluZW50cykuDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRlcyAqY2x1c3RlcnMqIHNlbG9uIGRpZmbDqXJlbnRlcyBtw6l0aG9kZXMgcGx1cyBvdSBtb2lucyDDqWxhYm9yw6llcyAoKlByb2NoZSB2b2lzaW4qIHByZW5kIHBsdXMgZGUgbcOpbW9pcmUpIHF1aSBwZXJtZXR0ZW50IGRlIHJlZ3JvdXBlciBsZXMgdmFsZXVycyBzaW1pbGFpcmVzIGV0IHByb3Bvc2VudCBkZXMgbWF0Y2hzIHBvc3NpYmxlcyAoKmZ1enp5IG1hdGNoaW5nKik6IHBhciBleGVtcGxlICplbXByZWludGUqIGVzdCBwbHVzIGNvbnNlcnZhdGV1ciAoZGlzdGluZ3VlIGNhc3NlLCBlc3BhY2VzLCBvcmRyZSwgcsOpcMOpdGl0aW9uLCBwb25jdHVhdGlvbi4uLiksICpuZ3JhbSogZXN0IHBsdXMgZmxleGlibGUgKG3Dqm1lcyBjYXJhY3TDqHJlcyksICpNZXRhcGhvbmUzKiBlc3QgbGUgcGx1cyAibGliw6lyYWwiIChtw6ptZSBwcm9ub25jaWF0aW9uKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1Ki4gIA0KLSBDbGlxdWVyIHN1ciBgR3JvdXBlYCBldCBleHBsb3JlciBsZXMgcmVncm91cGVtZW50cyBlbiBmb25jdGlvbiBkZXMgZGlmZsOpcmVudHMgYWxnb3JpdGhtZXMuICANCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA3LjMuIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgDQoNCg0KLSBGb25jdGlvbm5lbnQgY29tbWUgZGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgc2F1ZiBxdSdvbiBuZSBwZXV0IMOpZGl0ZXIgZW4gZm9uY3Rpb24gZGUgY2VzIHLDqXN1bHRhdHMgY2FyIGVsbGVzIHByw6lzZW50ZW50IGRlcyBkb25uw6llcyBtb2RpZmnDqWVzIGVuIG3DqW1vaXJlLg0KDQotIE9udCDDqXTDqSBkw6l2ZWxvcHDDqWVzIGV0IGF1dG9tYXRpc8OpZXMgYWZpbiBkJ2V4cGxvcmVyIGRlcyBhc3BlY3RzIHByw6ljaXMgZGVzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgbGVzICByw6lkaWdlciBlbiBzeW50YXhlIEdSRUw6IA0KDQogIC0gYEZhY2V0dGUgcGFyIG1vdGAgOiBEaXZpc2UgY2hhcXVlIG1vdCAoc8OpcGFyw6kgZCd1biBlc3BhY2UpIGQndW5lIGNvbG9ubmUgZXQgbGVzIHByw6lzZW50ZSBlbiBsaXN0ZSBkZSB2YWxldXJzIGRpc3RpbmN0ZXMgW3ZhbHVlLnNwbGl0KCIgIildLg0KICANCiAgLSBgRmFjZXR0ZSBkb3VibG9uc2A6IHZhbGV1cnMgYm9vbMOpZW5uZXMgaW5kaXF1YW50IHNpIGxlcyB2YWxldXJzIHNvbnQgdW5pcXVlcyAoZmFsc2UpIG91IG5vbiAodHJ1ZSkgW2ZhY2V0Q291bnQodmFsdWUsICd2YWx1ZScsICdTeW1wdG9tZScpID4gMV0uICANCiAgDQogIC0gYEZhY2V0dGVzIGxvZ2FyaXRobWlxdWVzYDogbW9kaWZpY2F0aW9uIGxvZ2FyaXRobWlxdWUgZGUgdmFsZXVycyBudW3DqXJpcXVlcyBbdmFsdWUubG9nKCldLg0KICANCiAgLSBgRmFjZXR0ZSBsb25ndWV1ciBkZSB0ZXh0ZWA6IGxpc3RlIGxlIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBkdSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIFt2YWx1ZS5sZW5ndGgoKV0uDQogIA0KICAtIEZhY2V0dGVzIHBlcm1ldHRhbnQgZCdleHBsb3JlciBsZXMgdmFsZXVycyBkJ2BlcnJldXJgLCBgbnVsbGVzYCwgYHZpZGVzYC4uLiBbaXNFbXB0eVN0cmluZyh2YWx1ZSldDQoNCioqKiANCg0KIyA4LiAgVHJhbnNmb3JtYXRpb25zDQoNCi0gT3BlblJlZmluZSBwZXJtZXQgZCdleHBsb3JlciBtYWlzIGF1c3NpIGRlIG1vZGlmaWVyIHNlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIHRvdWNoZXIgYXUgY29udGVudSBkZSBjZWxsdWxlcyBtYW51ZWxsZW1lbnQuICANCg0KLSBDb21tZSBwb3VyIGxlcyBmYWNldHRlcywgbGVzIGZvbmN0aW9ucyBkZSB0cmFuc2Zvcm1hdGlvbiBwZXV2ZW50IHNlIGZhaXJlIGRlIGRldXggZmHDp29uczogICAgDQoNCiAgMS4gVHJhbnNmb3JtYXRpb25zIGF1dG9tYXRpc8OpZXMgKGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCkgKipbMl0qKjogZm9uY3Rpb25zIHBlcm1ldHRhbnQgZCdhcHBsaXF1ZXIgZGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzIHN1ciBsZSBmb3JtYXQgZXQgbGEgc3RydWN0dXJlIGRlcyBjZWxsdWxlcy9jb2xvbm5lcy4gIA0KICANCiAgMi4gVHJhbnNmb3JtYXRpb25zIG1hbnVlbGxlcyBkYW5zIGxhIGZlbsOqdHJlIEdSRUwgKipbMV0qKiBhZmluIGQnYWxsZXIgYmVhdWNvdXAgcGx1cyBsb2luLiAgDQogIA0KDQohW10oaW1hZ2VzL09SMjQuanBnKQ0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KUG91ciB2b2lyIGxhIHN5bnRheGUgY29ycmVzcG9uZGFudCDDoCBjaGFxdWUgZm9uY3Rpb24gZGUgYHRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBhcHBsaXF1ZXIgbGEgZm9uY3Rpb24gc3VyIHVuZSBjb2xvbm5lIHB1aXMgYWxsZXIgdm9pciBsJ2hpc3RvcmlxdWUuIFBhciBleGVtcGxlOiBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1RpdGxlY2FzZSgpYCwgYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9VcHBlcmNhc2UoKWAsIGB2YWx1ZS50cmltKClgLi4uIDwvZGl2Pg0KDQoqKiogDQoNCg0KIyMgOC4xLiBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgbXVsdGl2YXJpw6llcw0KDQotICoqRGV1eCBvcHRpb25zOiAqKiAgDQogIDEuIEVuIGRpdmlzYW50IGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuICoqcGx1c2lldXJzIGNvbG9ubmVzKio6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXNgICANCiAgMi4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBzdXIgKipwbHVzaWV1cnMgbGlnbmVzKio6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBEaXZpc2VyIGxlcyBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzYCAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IzNy5qcGcpICANCg0KLSBMYSBwcmVtacOocmUgb3B0aW9uIGVzdCBsYSBwbHVzIGZyw6lxdWVudGUuIA0KLSBMYSBkZXV4acOobWUgb3B0aW9uIGF1cmEgdW4gZWZmZXQgaW1wb3J0YW50IHN1ciBsYSBzdHJ1Y3R1cmUgZGVzIG9ic2VydmF0aW9ucyBwdWlzcXUnZWxsZSBtdWx0aXBsaWVyYSBsZSBub21icmUgZGUgbGlnbmVzIHBhciBjYXMgKGNlIHF1aSBuw6ljZXNzaXRlcmEgZGUgcGFzc2VyIMOgIGxhIHZ1ZSBwYXIgYGVudHLDqWVzYCkuDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpUcmFuc2Zvcm1lciBsYSB2YXJpYWJsZSAqTGlnbmUqDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlVuaWZvcm1pc2VyIGxlIG5vbSBkZXMgbGlnbmVzOioqICANCg0KLSBDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgTGlnbmUuIA0KDQotIERldXggcHJvYmzDqG1lcyBzZSBwb3NlbnQ6IDEpIGxlcyBub21zIGRlIGxpZ25lcyBub24gdW5pZm9ybWVzIGV0IDIpIGxlcyB2YWxldXJzIG11bHRpcGxlcy4gIA0KDQotIE5vdXMgY2hvaXNpc3NvbnMgZCd1bmlmb3JtaXNlciBsZXMgdmFsZXVycyBlbiB1dGlsaXNhbnQgbGVzIG51bcOpcm9zIGRlIGxpZ25lcyBldCBlbiBzdXBwcmltYW50IGxlIG1vdCBMaWduZS4gIA0KDQotIEV4cGxvcmVyIGV0IGFjY2VwdGVyIGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBhdmVjIGxhIGZvbmN0aW9uIGBHcm91cGVgLiAgDQoNCi0gU3VwcHJpbWVyIGxlIG1vdCBsaWduZTogIA0KDQogIC0gYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHJlbXBsYWNlcmAgLT4gIkxpZ25lIiBwYXI6IG5lIHJpZW4gc2Fpc2lyIGRhbnMgbCdlbmNhZHLDqS4gICAgDQoNCg0KLSBDbGlxdWVyIGVuc3VpdGUgZGlyZWN0ZW1lbnQgc3VyIGBlZGl0YCBzdXIgdW5lIGNlbGx1bGUgZGUgbGEgY29sb25uZSBkZSAqTGlnbmUqIC0+IHJlbWFycXVlciBsYSBwcsOpc2VuY2UgZCd1biBlc3BhY2UsIHN1cHByaW1lciBsJ2VzcGFjZSBldCBmZXJtZXIuIA0KDQotIFJhZnJhaWNoaXIgbGEgZmFjZXR0ZSBldCBvYnNlcnZlciBsJ2ltcGFjdC4gDQoNCi0gUmVtYXJxdWVyIGwnaW1wYWN0IGRlIGwnZXNwYWNlIGRhbnMgbGEgZmFjZXR0ZS4gQ2VzIGVzcGFjZXMgcGV1dmVudCDDqnRyZSBzdXBwcmltw6lzIGdyw6JjZSDDoCBsYSBmb25jdGlvbjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gU3VwcHJpbWVyIGxlcyBlc3BhY2VzIGRlIGTDqWJ1dCBldCBkZSBmaW5gLiAgIA0KLSBSZW1wbGFjZXIgbGVzIGNvdWxldXJzIGRlIGxpZ25lIHBhciBsZXVyIG51bcOpcm8gZGlyZWN0ZW1lbnQgZGFucyBsYSBmYWNldHRlLiAgIA0KPC9kaXY+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipEaXZpc2VyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuIGNyw6lhbnQgZGVzIGNvbG9ubmVzIGF2ZWMgdW5lIHNldWxlIHZhbGV1ciAgKioNCg0KLSBEYW5zIGxhIGZhY2V0dGUsIHJlbXBsYWNlciBsZXMgIi0iIHBhciBkZXMgIiwiLiAgICANCg0KLSBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYDoNCiAgLSBEw6lmaW5pciBsZSBzw6lwYXJhdGV1ciAiLCIgKGNlbHVpLWNpIGRpc3BhcmFpdHJhKS4gIA0KICAtIETDqWNvY2hlciBsZXMgb3B0aW9ucyAiRGV2aW5lciIgZXQgIlN1cHByaW1lciIuICANCi0gTGVzIG5vdXZlbGxlcyBjb2xvbm5lcyByZXByZW5kcm9udCBsZSBub20gZGUgbCdvcmlnaW5hbCBudW3DqXJvdMOpLiBMZXMgcmVub21tZXI6IHByZW1pZXJlLCBkZXV4aWVtZSwgdHJvaXNpZW1lLCBxdWF0cmllbWUuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KRGl2aXNlciBwYXIgbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHMgbGEgY29sb25uZSBgTnVtw6lybyBkJ2luY2lkZW50YCBwb3VyIGVuIGNyw6llciBkZXV4IG5vdXZlbGxlczogIA0KICAxLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbGUgcHJlbWllciBjYXJhY3TDqHJlIGluZGlxdWFudCBsZSB0eXBlIGQnaW5jaWRlbnQsIHNvaXQgVCAodHJhaW4pIG91IFMgKHNlcnZpY2UpLiAgDQogIDIuIFVuZSBjb2xvbm5lIGNvbnRlbmFudCBsJ2Vuc2VtYmxlIGRlcyBjYXJhY3TDqHJlcyBudW3DqXJpcXVlcyBpbmRpcXVhbnQgbGUgbnVtw6lybyBkJ2luY2lkZW50LiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlbDqXJpZmljYXRpb25zIHByw6lhbGFibGVzOioqDQogIDEuIFbDqXJpZmllciBxdSdpbCBuJ3kgYSBwYXMgZGUgZG91YmxvbiBkYW5zIGNldHRlIGNvbG9ubmU6IGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBkb3VibG9uYCAtPiBRdWVsIGVzdCBsZSBwcm9ibMOobWU/ICBDbGlxdWVyIHN1ciBgQ2hhbmdlcmAgZXQgYW5hbHlzZXIgbCdleHByZXNzaW9uLiAgDQogIDIuIFbDqXJpZmllciBsYSBsb25ndWV1ciBkZSBjaGFxdWUgY2FzOiAgYEZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAtPiBGYWNldHRlIGxvbmd1ZXVyIGR1IHRleHRlYC4gICAgDQoNCioqRGl2aXNlciBsYSBjb2xvbm5lOioqICANCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lcyBzZWxvbiBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wc2AgOiAxLCA4LiAgICANCi0gRMOpY29jaGVyIDogZGV2aW5lciBsZSB0eXBlIGRlIGNlbGx1bGUgZXQgU3VwcHJpbWVyIGNldHRlIGNvbG9ubmUuICAgIA0KLSBSZW5vbW1lciBsZXMgY29sb25uZXMgOiBUeXBlIGV0IElELiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyMgOC4yLiBGdXNpb25uZXIgbGUgY29udGVudSBkZSBwbHVzaWV1cnMgY29sb25uZXMNCg0KIyMgRXhlcmNpY2UgICANCg0KTm91cyBzb3VoYWl0b25zIGNhbGN1bGVyIGxhIGR1csOpZSBkZXMgaW5jaWRlbnRzLiBQb3VyIGNlIGZhaXJlIG5vdXMgY3LDqWVyb25zIGRldXggY29sb25uZXM6ICANCi0gVW5lIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCi0gVW5lIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCkxvcnNxdWUgbCdvbiBmdXNpb25uZSBkZXMgY29sb25uZXMsIGlsIGZhdXQgcG9ydGVyIHVuZSBhdHRlbnRpb24gcGFydGljdWxpw6hyZSBhdSBzw6lwYXJhdGV1ciBjaG9pc2kuIE5lIHBhcyB1dGlsaXNlciB1biBjYXJhY3TDqHJlIHF1aSBwb3VycmFpdCBmYWlyZSBwYXJ0aWUgZHUgY29udGVudSAoZXg6ICwpIG91IHF1aSBzZXJ2aXJhIMOgIGRpdmlzZXIgbGVzIGNvbG9ubmVzICguY3N2KQ0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjEuICoqRm9uY3Rpb24gYXV0b21hdGlzw6llKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Kg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gYMOJZGl0ZXIgbGEgY29sb25uZWAgLT4gYEpvaW5kcmUgbGVzIGNvbG9ubmVzYC4gICAgDQotIEpvaW5kcmUgZGVzIGNvbG9ubmVzIC0+IENvY2hlciBsZXMgY29sb25uZXMgdm91bHVlcy4gIA0KLSBTw6lwYXJhdGV1ciBlbnRyZSBsZSBjb250ZW51IGRlIGNoYXF1ZSBjb2xvbm5lOiAiLSIuICAgIA0KLSDDiWNyaXJlIGxlIHLDqXN1bHRhdCBkYW5zIHVuZSBub3V2ZWxsZSBjb2xvbm5lIG5vbW3DqWU6ICpEYXRlKi4gICAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMi4gKipGZW7DqnRyZSBHUkVMKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSByZXByaXNlKg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZTogIA0KDQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFbDqXJpZmllciBsYSB0cmFuc2Zvcm1hdGlvbiBhdmVjIHVuZSBmYWNldHRlIGB2YWx1ZS50eXBlKClgLiAgDQoNCi0gUmVjb21tZW5jZXIgbGEgam9pbnR1cmUgcG91ciBjcsOpZXIgdW5lIGNvbG9ubmUgYXZlYyBsYSBkYXRlLWhldXJlIGRlIGZpbiBkZSBsJ2luY2lkZW50DQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDYWxjdWxlciBsYSBkdXLDqWUgZGUgbCdpbmNpZGVudCAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIHZpZGU6ICANCmDDiWRpdGVyIGxhIGNvbG9ubmUgPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmUgYCAtPiBDaG9pc2lyIHVuIG5vdXZlYXUgbm9tIGV0IGxlIGNvbnRlbnU6ICIiLiAgDQoNCi0gUG91ciBjYWxjdWxlciB1bmUgZGlmZsOpcmVuY2UgZW50cmUgZGF0ZTogYGRpZmYoZGF0ZTEsIGRhdGUyLCAicmVzdWx0cyBmb3JtYXQiKWAuICAgIA0KDQpgZGlmZihjZWxsc1snZGF0ZTInXS52YWx1ZSxjZWxsc1snZGF0ZTEnXS52YWx1ZSwgJ21pbnV0ZXMnKWAuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgOS4gTGUgbGFuZ2FnZSBHUkVMIA0KDQoNCi0gKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSogDQotIExhbmdhZ2Ugc2ltaWxhaXJlIMOgIGphdmFzY3JpcHQgZXQgZm9ybXVsZXMgZXhjZWwuICAgIA0KLSBQZXJtZXQgbGEgcsOpZGFjdGlvbiBkJ2V4cHJlc3Npb25zIHZpc2FudCDDoCBtYW5pcHVsZXIvdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZS4gIA0KKFZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpICANCi0gTGFuZ2FnZSBjb21wb3PDqSBkZSBbZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMpIGV0IGQnW29iamV0c10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyN2YXJpYWJsZXMpLg0KDQo8L2JyPg0KDQojIyAgOS4xLiBHUkVMIC0gUHJpbmNpcGVzIGRlIGJhc2UgDQoNCiMjIyMgVXRpbGlzZSB1bmUgc3ludGF4ZSBwYXJ0aWN1bGnDqHJlIHBvdXIgY2libGVyIGxlcyBvYmpldHMgKHZhcmlhYmxlcyk6ICANCi0gQ29udGVudSBkZSBjb2xvbm5lIGFjdHVlbGxlOiBgdmFsdWVgLiAgICAgDQotIENvbnRlbnUgZCd1bmUgYXV0cmUgY29sb25uZTogYGNlbGxzWydub20tY29sb25uZSddLnZhbHVlYC4gICAgDQotIENvbnRlbnUgdGV4dHVlbDogImd1aWxsZW1ldCBzaW1wbGUgb3UgZG91YmxlIi4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGV1eCBmb3JtYXRzIGRlIG5vdGF0aW9uOiAgDQotIEltYnJpcXXDqWU6ICh0cmltKHRvTG93ZXJjYXNlKHZhbHVlKSkuICAgIA0KLSAqKlPDqXF1ZW50aWVsbGUqKjogdmFsdWUudG9Mb3dlcmNhc2UoKS50cmltKCkgKHBsdXMgZmFjaWxlIMOgIGxpcmUpLiAgICANCg0KPC9icj4NCg0KIyMjIyBEaWZmw6lyZW50cyB0eXBlcyBkZSBmb25jdGlvbnM6ICANCi0gTGVzIGZvbmN0aW9ucyBldCBsZXVyIGNvbXBvcnRlbWVudCBkw6lwZW5kcm9udCBkdSB0eXBlIGRlIGRvbm7DqWVzIG1hbmlwdWzDqWVzLiAgDQotIFtDZXJ0YWluZXMgZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMjc2xpY2VhLW4tZnJvbS1uLXRvLW9wdGlvbmFsKSBwZXJtZXR0ZW50IGRlIHRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gYGFycmF5c2AgKGxpc3RlIGQnw6lsw6ltZW50cykgZXQgZGUgbGVzIG1hbmlwdWxlci4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyNyZWd1bGFyLWV4cHJlc3Npb25zKSBwZXJtZXR0ZW50IGQndXRpbGlzZXIgbGVzIFtleHByZXNzaW9ucyByw6lndWxpw6hyZXNdKCNleHByZXNzaW9uKS4gIA0KDQo8L2JyPg0KDQojIyMjIERpZmbDqXJlbnRzIHR5cGVzIGQnb3DDqXJhdGV1cnM6ICANClNlbG9uIGxlIGZvcm1hdCwgZGlmZsOpcmVudHMgdHlwZXMgZCcqKm9ww6lyYXRldXJzKiogcGV1dmVudCDDqnRyZSB1dGlsaXPDqXMgZW50cmUgbGVzIHZhbGV1cnM6ICANCgktIE9ww6lyYXRldXJzIGFyaXRobcOpdGlxdWVzOiArLCAtLCAqLCAvICANCgktIE9ww6lyYXRldXJzIGJvb2zDqWVuczogPT0sID4sIDwgIA0KICANCioqUGFyIGV4ZW1wbGU6KioNCg0KLSBMZSAiKyIgZW50cmUgZGV1eCBjb250ZW51cyBudW3DqXJpcXVlcyA9IHNvbW1lDQoNCiFbXShpbWFnZXMvT1IzMC5qcGcpDQoNCi0gTGUgIisiIGF2ZWMgdW4gY29udGVudSB0ZXh0dWVsID0gY29uY2F0w6luYXRpb24NCg0KIVtdKGltYWdlcy9PUjMxLmpwZykNCg0KPC9icj4NCg0KKioqICANCg0KIyMgIDkuMi4gR1JFTCAtIEwnaW5kZXhhdGlvbiwgbGEgc8OpbGVjdGlvbiBldCBsYSBtYW5pcHVsYXRpb24gZCfDqWzDqW1lbnRzOiAgDQoNCi0gQ2hhcXVlIGNhcmFjdMOocmUgY29tcG9zYW50IGxhIHZhbGV1ciBkJ3VuZSBjZWxsdWxlIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkuDQotIENoYXF1ZSDDqWzDqW1lbnQgZCd1biAqYXJyYXkqIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkgZXQgcGV1dCDDqnRyZSBjaWJsw6kgZ3LDomNlIGF1eCBgWyBdYC4gIA0KLSBMJ29ww6lyYXRldXIgYFsgXWAgcGVybWV0IGRlIGNpYmxlci9zw6lsZWN0aW9ubmVyIGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIG91IGRlcyBzb3VzLcOpbMOpbWVudHMgc3DDqWNpZmlxdWVzLiANCg0KPC9icj4NCg0KIyMjIEV4ZW1wbGUgLSBGb25jdGlvbiBzcGxpdCgpICAgDQoNCj4gYHZhbHVlWzAsOF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdLnNwbGl0KCIpIilbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/XltNb250csOpYWwgLyBRdcOpYmVjKSAvIFF1w6liZWNdICANCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UgLSBGb25jdGlvbiByZXBsYWNlKCkgIA0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpgSVNCTjogOTc4LTItMTMtMDgyOTMwLTBgDQoNCkNvbnNlcnZlciBzZXVsZW1lbnQgbGUgY2hpZmZyZSBkZSBsJ0lTQk4gZGFucyBsZXMgdHJhaXRzIGQndW5pb24/Xlt2YWx1ZVs1LDI0XS5yZXBsYWNlKCItIiwgIiIpXQ0KDQpJbmRpY2VzOiAgDQoNCi0gYHZhbHVlYCAgDQotIGByZXBsYWNlKClgICAoInF1ZWxxdWUgY2hvc2UiLCAicGFyIGxlIHZpZGUiKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KIyMjIEV4ZW1wbGUgLSBGb25jdGlvbiBzbGljZSgpICANCg0KYE1hcnRpbm9sbGksIFBhc2NhbDsgR2FicmllbGxpLCBOaW5vOyBGb3J0aWVyLCBDYXRoZXJpbmU7IEJlbGxlbWFyZSwgUGFzY2FsZWANCg0KIVtdKGltYWdlcy9PUjI1LmpwZykNCg0Kw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXIgLT4gYHZhbHVlLnNwbGl0KCI7ICIpLnNsaWNlKDEpLmpvaW4oIlxuIilgIA0KDQohW10oaW1hZ2VzL09SMzkuanBnKQ0KDQotIGBzcGxpdCgpYDogZGl2aXNlIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgOw0KLSBgc2xpY2UoKWAgOiBjb25zZXJ2ZSBsZXMgw6lsw6ltZW50cyDDoCBwYXJ0aXIgZGUgbCfDqWzDqW1lbnQgMSBkb25jIHN1cHByaW1lIGxlIDAuIA0KLSBgam9pbigpYDogbGVzIGpvaW50cyBhdmVjIGxlIHPDqXBhcmF0ZXVyIDsNCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UgLSBGb25jdGlvbiBzb3J0KCkgIA0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpNZXR0cmUgbGVzIG5vbXMgZW4gb3JkcmUgYWxwaGFiw6l0aXF1ZSBldCBsZXMgam9pbmRyZSBhdmVjIHVuZSB2aXJndWxlLl5bdmFsdWUuc3BsaXQoIjsgIikuc29ydCgpLmpvaW4oIiwgIildDQoNCkluZGljZXM6ICANCg0KLSBgc3BsaXQoKWA6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyICANCg0KLSBgc29ydCgpYDogdHJpIGxlcyDDqWzDqW1lbnRzICANCg0KLSBgam9pbigpYDogbGVzIGpvaW50cyBhdmVjIGxlIHPDqXBhcmF0ZXVyICANCg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHJldmVyc2UoKSAgDQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKVsxXS5zcGxpdCgiLCAiKS5yZXZlcnNlKCkuam9pbigiICIpICsgIiBlc3QgbGUgbWVpbGxldXIiYCANCg0KIVtdKGltYWdlcy9PUjM4LmpwZykNCg0KLSBgc3BsaXQoKWA6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsgZXQgcmV0aWVudCBsZSBkZXV4acOobWUgw6lsw6ltZW50DQotIGBzcGxpdCgpYDogZGl2aXNlIGNldCDDqWzDqW1lbnQgc3VyIGxlIHPDqXBhcmF0ZXVyICwNCi0gYHJldmVyc2UoKWA6IGludmVyc2UgbCdvcmRyZSBkZXMgZGV1eCDDqWzDqW1lbnRzDQotIGBqb2luKClgOiByYXR0YWNoZSBsZXMgZGV1eCDDqWzDqW1lbnRzIGRpdmlzw6kgYXZlYyB1biBlc3BhY2UNCg0KPC9icj4NCg0KKioqDQoNCiMjIDkuMy4gQ3LDqWVyIGRlcyBmYWNldHRlcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2VzDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGxpc3RlciBsZXMgY2FzIHNlbG9uIGwnKmhldXJlIGRlIGwnaW5jaWRlbnQqIHNldWxlbWVudCwgc2FucyBsZXMgbWludXRlcyAoMiBwcmVtaWVycyBjYXJhY3TDqHJlcykuIENvbW1lbnQgZmFpcmUgYWZmaWNoZXIgbGVzIG1pbnV0ZXMgc2V1bGVtZW50P15bdmFsdWVbMyw1XSBvdSB2YWx1ZS5zdWJzdHJpbmcoMyldIA0KDQpgdmFsdWVbMCwyXWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KiBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBjb21tZW5jZSBwYXIgIkPDtHRlIiAgDQoNCmB2YWx1ZS5zdGFydHNXaXRoKOKAnEPDtHRl4oCdKWAgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogZXN0IGxhIG3Dqm1lIHF1ZSBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHNlY29uZGFpcmUqDQoNCmB2YWx1ZSA9PSBjZWxsc1siQ2F1c2Ugc2Vjb25kYWlyZSJdLnZhbHVlYCAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgOS40LiBSZWNoZXJjaGVyL3JlbXBsYWNlciB1biBjYXJhY3TDqHJlIGRhbnMgdG91dGVzIGxlcyBjb2xvbm5lcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClJlbXBsYWNlciBsZXMgdmFsZXVycyAiIyIgZGFucyB0b3V0ZSBsYSBiYXNlIGRlIGRvbm7DqWVzIHBhciAiYXVjdW4iKiogICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gUXVlbCBwcm9ibMOobWUgY2UgcmVtcGxhY2VtZW50IHBldXQtaWwgcHJvdm9xdWVyPyAgICANCi0gRXhwbG9yZXIgbCdpbXBhY3QgZGVzIHRyb2lzIGV4cHJlc3Npb25zIGRlIHJlbXBsYWNlbWVudCBzdWl2YW50ZXM6ICANCg0KMS4gYHZhbHVlLnJlcGxhY2UoIiMiLCAiYXVjdW4iKWAgICANCihyZW1wbGFjZSBsZSBjYXJhY3TDqHJlICM6IGF1Y3VuIGV0IGF1Y3VuTi9EICkgICAgIA0KIA0KMi4gYGlmKHZhbHVlLmNvbnRhaW5zKCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgIA0KKHJlbXBsYWNlIGxlcyBjZWxsdWxlcyBkZXMgIyBldCAjTkQgcGFyIGF1Y3VuKSAgDQoNCjMuIGBpZih2YWx1ZT09KCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgICAgDQoocmVtcGxhY2Ugc2V1bGVtZW50IGxlcyBjZWxsdWxlcyAjLCBwYXMgbGVzICNORCBwYXIgYXVjdW4pIA0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCiMjIDkuNS4gQ3LDqWVyIGV0IGNvcGllciBkZXMgY29sb25uZXMNCg0KPC9icj4NCg0KYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgDQoNCiFbXShpbWFnZXMvT1IzMi5qcGcpDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBzdXIgbGEgYmFzZSBkZSBsYSBjb2xvbm5lICpKb3VyIGRlIGxhIHNlbWFpbmUqIGluZGlxdWFudCBzaSBsZSBqb3VyIGVzdCBlbiBzZW1haW5lIG91IGZpbiBkZSBzZW1haW5lLg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYGlmKHZhbHVlID4gNSwiZmluIGRlIHNlbWFpbmUiLCJzZW1haW5lIilgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgY29sb25uZSDDoCBwYXJ0aXIgZGUgbGEgY29sb25uZSAqaGV1cmUgZGUgbCdpbmNpZGVudCogZW4gbmUgY29uc2VydmFudCBxdWUgbCdoZXVyZSwgc2FucyBsZXMgbWludXRlcywgZXQgcmFqb3V0ZXIgbGEgbGV0dHJlIGggcG91ciBkb25uZXIgcGFyIGV4ZW1wbGUgY2VjaTogMTU6MTIgIC0+ICAxNWguICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmB2YWx1ZS5zcGxpdCgnOicpWzBdICsgImgiYC4gIA0KDQpPdQ0KDQpgdmFsdWUuc3BsaXRCeUxlbmd0aHMoMilbMF1gLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoqKioNCg0KDQojIDEwLiBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHsjZXhwcmVzc2lvbn0NCg0KIyMgMTAuMS4gQ2FyYWN0w6lyaXN0aXF1ZXMgIA0KDQotIEwndXNhZ2UgZGUgR1JFTCBwZXJtZXQgZGVzIG1hbmlwdWxhdGlvbnMgZGUgZG9ubsOpZXMgYmVhdWNvdXAgcGx1cyBhdmFuY8OpZXMgcXVlIGwndXRpbGlzYXRpb24gZGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBtYWlzIE9wZW5SZWZpbmUgcGVybWV0IGVuIHBsdXMgZGUgY29tYmluZXIgbCd1dGlsaXNhdGlvbiBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGF2ZWMgR1JFTCBwb3VyIGVuIGF1Z21lbnRlciBsYSBwdWlzc2FuY2UuIA0KLSBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBlcm1ldHRlbnQsIMOgIHBhcnRpciBkJ3VuZSBzeW50YXhlIHNww6ljaWZpcXVlLCBkJ2lkZW50aWZpZXIgZGVzIHBhdHRlcm5zIGRhbnMgdW4gY29udGVudS4gIA0KLSBMb3JzcXUndXRpbGlzw6llcyBhdmVjIEdSRUwsIGNlcyBleHByZXNzaW9ucyBwZXJtZXR0ZW50IGRvbmMgZCdpZGVudGlmaWVyIGV0IGQnZXh0cmFpcmUgZGVzIGNvbnRlbnVzIHRyw6hzIHByw6ljaXMgcG91ciBlbnN1aXRlIGxlcyBtYW5pcHVsZXIgc2Vsb24gbGVzIGJlc29pbnMuICANCi0gRWxsZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIMOgIGRpZmbDqXJlbnRzIGVuZHJvaXRzIGRhbnMgT3BlblJlZmluZSBldCBkb2l2ZW50IHRvdWpvdXJzIMOqdHJlIGVudG91csOpZXMgZGUgYC8gL2A6IGZpbHRyZXMsIGZhY2V0dGVzLCBmZW7DqnRyZSBHUkVMLg0KLSBDZXJ0YWluZXMgZXhwcmVzc2lvbnMgcGV1dmVudCBzJ8OpY3JpcmUgZW4gR1JFTCBhdmVjIG91IHNhbnMgcmVnZXguICANCi0gTGVzIGZvbmN0aW9ucyBHUkVMIHF1aSBhY2NlcHRlbnQgbGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlczogYHJlcGxhY2VgLCBgbWF0Y2hgLCBgcGFydGl0aW9uYCwgYHJwYXJ0aXRpb25gLCBgc3BsaXRgLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzMuanBnKQ0KDQoNCi0gTWFpcyBjZXJ0YWluZXMgZm9uY3Rpb25zIChjb21tZSBgbWF0Y2hgKSBuJ2FjY2VwdGVudCBxdWUgY2VzIGV4cHJlc3Npb25zLiAgDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KDQpMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyBhdmVjIHBsdXNpZXVycyBhdXRyZXMgbGFuZ2FnZXMgZG9udCBbUl0oaHR0cHM6Ly90b3dhcmRzZGF0YXNjaWVuY2UuY29tL2EtZ2VudGxlLWludHJvZHVjdGlvbi10by1yZWd1bGFyLWV4cHJlc3Npb25zLXdpdGgtci1kZjVlODk3Y2E0MzIpIGV0IFtQeXRob25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vcmVnZXguaHRtbCkgZXQgZGFucyBkZXMgbG9naWNpZWxzIHF1aSBuJ29udCByaWVuIMOgIHZvaXIgYXZlYyBsZXMgc3RhdGlzdGlxdWVzIGNvbW1lIFtPcGVuT2ZmaWNlXShodHRwczovL3dpa2kub3Blbm9mZmljZS5vcmcvd2lraS9Eb2N1bWVudGF0aW9uL0hvd19Ub3MvUmVndWxhcl9FeHByZXNzaW9uc19pbl9Xcml0ZXIpLg0KDQpQb3VyIGVuIHNhdm9pciBwbHVzOiAgDQotIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9VbmRlcnN0YW5kaW5nLVJlZ3VsYXItRXhwcmVzc2lvbnMgIA0KLSBodHRwczovL3JlZ2V4MTAxLmNvbS8gIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMjIDEwLjIuIExhIHN5bnRheGUgZGUgYmFzZTogICANCg0KTGEgc3ludGF4ZSBlc3QgY29tcG9zw6llIGQnw6lsw6ltZW50cyBwZXJtZXR0YW50IGRlICBjaWJsZXIgZGVzIGNhcmFjdMOocmVzIHByw6ljaXMgZXQgZGUgZMOpZmluaXIgbGV1ciBlbXBsYWNlbWVudCBldCBsZXVyIG9jY3VycmVuY2UuDQoNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgVFlQRVMgREUgQ0FSQUNUw4hSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVVBTlRJRklDQVRFVVJTIEVUIEVNUExBQ0VNRU5UICAgICAgICAgICAgICAgICB8IA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCBgLmAgOiBO4oCZaW1wb3J0ZSBxdW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYCtgIDogMSBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcd2AgOiBuJ2ltcG9ydGUgcXVlbCBtb3QsIGNoaWZmcmUgb3UgXyAgKGBcV2AgOiBzYXVmKSAgICAgfCBgKmAgOiAwIG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXGRgIDogQ2hpZmZyZXMgICAgICAoYFxEYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgICB8IGA/YCA6IDAgb3UgdW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxzYCA6IEVzcGFjZXMgICAgICAgICAoYFxTYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgfCBgezJ9YCA6IE5vbWJyZSBleGFjdCAoaWNpIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW0EtWl1gIDogTWFqdXNjdWxlcyAgICAgKGBbXkEtWl1gIDogc2F1ZikgICAgICAgICAgICB8IGB7LDR9YCA6IEVudHJlIDAgZXQgNCBpbmNsLiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthLXpdYCA6IE1pbnVzY3VsZXMgICAgICAoYFteYS16XWAgOiBzYXVmKSAgICAgICAgICAgfCBgezQsfWAgOiA0IG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthYmQ7XWAgOiBsZXMgbGV0dHJlcyBhLCBiLCBjLCBkIGV0IGxlIDsgICAgICAgICAgICAgfCBgezE7M31gIDogMSBPVSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgYWJjZGAgOiB1bmUgb3UgcGx1c2lldXJzIGxldHRyZXMgZXhhY3RlcyAgICAgICAgICAgICB8IGB7MSwzfWAgOiBFbnRyZSAxIGV0IDMgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGB8YCA6IE91ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBeYCA6IETDqWJ1dCBkJ3VuZSBsaWduZSAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGAoKWAgOiBHcm91cGVyIHVuIGNvbnRlbnUgZXQgbGUgZ2FyZGVyIGVuIG3DqW1vaXJlICAgICAgfCBgJGAgOiBGaW4gZCd1bmUgbGlnbmUgb3UgcmFwcGVsZXIgdW4gZ3JvdXBlICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCAgYFxgIDogQ2hlcmNoZXIgdW4gY2FyYWN0w6hyZSBzcMOpY2lhbCBsaXR0w6lyYWxlbWVudCAgICB8IFNhbnMgcXVhbnRpZmljYXRldXIsIGwnb2NjdXJyZW5jZSBlc3QgZGUgMSAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KIyMjIyMgUGFyIGV4ZW1wbGUsIGplIGNoZXJjaGUgdW4gY29udGVudSBjb3JyZXNwb25kYW50IGF1IG1vdGlmOiAgDQoNCmBeXGR7NH0gK1tBLVpdXC5gICAgIA0KICAgDQotIGTDqWJ1dGUgcGFyIDQgY2hpZmZyZXMgICANCi0gc3VpdmkgZCd1biBlc3BhY2Ugb3UgcGx1cyAgIA0KLSBzdWl2aSBkJ3VuZSBsZXR0cmUgbWFqdXNjdWxlIGF2ZWMgdW4gcG9pbnQgICANCg0KPC9icj4NCg0KIyMjIyMgQXV0cmVzIGV4ZW1wbGVzIGF2ZWMgbGEgc3ludGF4ZSBPcGVuUmVmaW5lOg0KDQotIGB2YWx1ZS5maW5kKC9bQ2NdYXJvbGluZS8pYDogQ2Fyb2xpbmUgZXQgY2Fyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Ercm9saW5lLylgOiBjYXJvbGluZSBldCBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYSpyb2xpbmUvKWA6IGNhcm9saW5lLCBjYWFhcm9saW5lIGV0IGNyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2E/cm9saW5lLylgOiBjYXJvbGluZSBldCBjcm9saW5lIG1haXMgcGFzIGNhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2F7NH1yb2xpbmUvKWA6IGNhYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL15DYXJvbFxiLylgOiBDYXJvbCBlbiBkw6lidXQgZCdleHByZXNzaW9uLCBtYWlzIHBhcyBDYXJvbGluZSAoXGIgPSAiYm91bmRhcnkiKQ0KDQotIGB2YWx1ZS5maW5kKC9jW2Etel17Nn1lLylgOiBjICsgNiBtaW51c2N1bGVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DW2EtekEtWjAtOV17Nn1lLylgOiBDICsgNiBtaW51c2N1bGVzLCBtYWp1c2N1bGVzIG91IGNoaWZmcmVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DXHd7Nn1lLylgOiBDICsgW0EtWmEtejAtOV9dICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DLns2fWUvKWA6IEMgKyA2IG4naW1wb3J0ZSBxdW9pICsgZQ0KDQoNCioqKg0KDQojIyBFeGVyY2ljZQ0KDQojIyMgTWFuaXB1bGVyIGxlcyDDqWzDqW1lbnRzIGRlIHLDqWbDqXJlbmNlcyBiaWJsaW9ncmFwaGlxdWVzDQoNCiFbXShpbWFnZXMvT1IzNi5qcGcpDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoxLiBBbGxlciBzdXIgbGUgW2d1aWRlIEFQQV0oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2NpdGVyL3N0eWxlcy1iaWJsaW9ncmFwaGlxdWVzL2FwYT90YWI9MzI4MSkuICAgICANCjIuIENvcGllciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZGUgTGVtYWlyZSBldCBMZWJvdmljaSBhdSBwb2ludCAyLjEuICAgICAgDQozLiBEYW5zIE9wZW5SZWZpbmUsIGNsaXF1ZXIgc3VyIGxlIHBldGl0IGxvZ28gZW4gaGF1dCDDoCBnYXVjaGUgLT4gYENyw6llciB1biBwcm9qZXRgIC0+IGBQcmVzc2UtcGFwaWVyYDogQ29sbGVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBlbiAgYWpvdXRhbnQgdW4gc8OpcGFyYXRldXIgKioiOyIqKiDDoCBsYSBmaW4gZGUgbGEgcHJlbWnDqHJlIC0+IFN1aXZhbnQuICAgICAgIA0KDQo0LiBNb2RpZmllciBsZXMgb3B0aW9uczogDQogIC0gTGVzIGNvbG9ubmVzIHNvbnQgc8OpcGFyw6llcyBwYXIgLSBwZXJzb25uYWxpc8OpICI7Ii4gIA0KICAtIETDqWNvY2hlciAiQW5hbHlzZXIgbGEgb3UgbGVzCTEgbGlnbmUocykgc3VpdmFudGUocykgY29tbWUgZGVzIGVudMOqdGVzIGRlIGNvbG9ubmVzIi4gIA0KNS4gQ3LDqWVyIHByb2pldC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KNi4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgICANCg0KNy4gRXhhbWluZXIgbCdpbXBhY3QgZGUgY2VzIGRldXggY29tbWFuZGVzICoqR1JFTCArIHJlZ2V4KiouIFF1J2VzdC1jZSBxdWkgc2UgcGFzc2U/DQoNCi0gw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXI6IA0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KLT4gQXR0ZW50aW9uIGF1eCBbcXVhbnRpZmljYXRldXJzICJnb3VybWFuZHMiXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvc3RhbmRhcmQvYmFzZS10eXBlcy9xdWFudGlmaWVycy1pbi1yZWd1bGFyLWV4cHJlc3Npb25zI2dyZWVkeS1hbmQtbGF6eS1xdWFudGlmaWVycykgKHZzIHBhcmVzc2V1eCkNCjwvYnI+DQoNCsOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KQXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGU6IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKXwoZXQpfCgsKS8sICIgIilgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgMTEuIFRyYW5zcG9zaXRpb24NCg0KIyMgRXhlcmNpY2U6IHRyYW5zcG9zZXIgdW4gdGFibGVhdSBkJ2luZGljYXRldXJzIGR1IFdESQ0KPC9icj4NCg0KKipGaWNoaWVyIG9yaWdpbmFsIHTDqWzDqWNoYXJnw6kgZGUgbGEgW0JhbnF1ZSBtb25kaWFsZV0oaHR0cHM6Ly9kYXRhYmFuay5iYW5xdWVtb25kaWFsZS5vcmcvcmVwb3J0cy5hc3B4P3NvdXJjZT13b3JsZC1kZXZlbG9wbWVudC1pbmRpY2F0b3JzKSBlbiBmb3JtYXQgLmNzdiBjb21wb3PDqSBkZSA1IHBheXMgZXQgNCBpbmRpY2F0ZXVycyDDoCBsJ2hvcml6b250YWxlIGV0IDMgYW5uw6llcyDDoCBsYSB2ZXJ0aWNhbGUqKiAgDQoNCi0gUG91ciBvdXZyaXIgbGUgZmljaGllciDDoCBwYXJ0aXIgZGUgc29uIGVtcGxhY2VtZW50IHN1ciBHaXRodWI6IGh0dHBzOi8vZ2l0aHViLmNvbS9DUkxOUC9vcGVucmVmaW5lIA0KICAtIENsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgKldESV9EYXRhX0V4dHJhY3QuY3N2KiAtPiBDbGlxdWVyIHN1ciBsZSBib3V0b24gUkFXIC0+IGNvcGllciBsJ2FkcmVzc2UgZHUgbmF2aWdhdGV1ci4NCiAgLSBEYW5zIE9wZW5SZWZpbmUsIENyw6llciB1biBwcm9qZXQgLT4gQWRyZXNzZXMgd2ViIChVUkxzKSAtPiBjb2xsZXIgbGUgbGllbi4NCiAgDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTEuanBnKQ0KDQo8L2JyPg0KDQoqKjEuIFRyYW5zcG9zZXIgbGVzIGRhdGVzIMOgIGwnaG9yaXpvbnRhbGUgKGZvcm1hdCAqbG9uZyopKiogIA0KDQo8L2JyPg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNwb3NlciAtPiBUcmFuc3Bvc2VyIGxlcyBjZWxsdWxlcyBkZSBwbHVzaWV1cnMgY29sb25uZXMgZW4gbGlnbmVzLi4uKg0KDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UyLmpwZykNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTMuanBnKQ0KDQo8L2JyPg0KDQoqKjIuIFJlbXBsaXIgYXV0b21hdGlxdWVtZW50IGxlcyBjZWxsdWxlcyB2aWRlcyBkZXMgZGV1eCBjb2xvbm5lcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gUmVjb3BpZXIgbGVzIHZhbGV1cnMgZGFucyBsZXMgY2VsbHVsZXMgdmlkZXMgY29uc8OpY3V0aXZlcyoNCg0KPC9icj4NCg0KKiozLiBUcmFuc3Bvc2VyIGxlcyBpbmRpY2F0ZXVycyBlbiB2YXJpYWJsZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKlRyYW5zcG9zZXIgLT4gQ29udmVydGlyIGVuIGxpc3RlIGxlcyBjb2xvbm5lcyBkZSBjbMOpL3ZhbGV1ci4uLioNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U0LmpwZykNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U1LmpwZykNCg0KPC9icj4NCg0KDQoqKioNCg0KIyAxMi4gRXhwb3J0ZXIgdW4gZmljaGllciBldCBmZXJtZXIgT3BlblJlZmluZQ0KDQotIEZvbmN0aW9uIMOgIHV0aWxpc2VyIGxvcnNxdWUgbCdvbiBlc3QgcHLDqnQgw6AgZXhwb3J0ZXIgc29uIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyBwb3VyIHRyYXZhaWxsZXIgZGFucyB1biBhdXRyZSBsb2dpY2llbCAoLmNzdiwgLnhscy4uLikNCi0gT1Igc2F1dmVnYXJkZSBhdXRvbWF0aXF1ZW1lbnQgbGVzIGZpY2hpZXJzIHNvdXMgZm9ybWUgZCdhcmNoaXZlcyBkZSBwcm9qZXQgZGFucyB1biBkb3NzaWVyIHN1ciBsZSBwb3N0ZSBkZSB0cmF2YWlsIGF1eHF1ZWxsZXMgb24gcGV1dCBhY2PDqWRlciBlbiBjbGlxdWFudCBzdXIgYE91dnJpciB1biBwcm9qZXRgIHN1ciBsYSBwYWdlIHByaW5jaXBhbGUuDQotIEwnb3V0aWwgYEV4cG9ydGV1ciB0YWJ1bGFpcmUgcGVyc29ubmFsaXPDqWAgZXN0IHRyw6hzIHV0aWxlIHBvdXIgcGFyYW3DqXRyZXIgbCdleHBvcnRhdGlvbiAoc8OpbGVjdGlvbiBkZSBjb2xvbm5lcywgZm9ybWF0IGRlIGRhdGVzLCBmb3JtYXQgZGUgZmljaGllci4uLikNCi0gRmVybWVyIGwnb25nbGV0IG5lIGZlcm1lIHBhcyBsZSBzZXJ2ZXVyIHF1aSBjb250aW51ZXJhIMOgIHJvdWxlciBlbiBhcnJpw6hyZS1wbGFuLg0KLSBBbGxlciDDoCBsYSBmZW7DqnRyZSBub2lyZSBkdSB0ZXJtaW5hbCBldCB1dGlsaXNlciBsZXMgdG91Y2hlcyBDVFJMICsgQyBqdXNxdSfDoCBjZSBxdSdlbGxlIHNlIGZlcm1lIGQnZWxsZS1tw6ptZSAoaWwgZXN0IHBhcmZvaXMgbsOpY2Vzc2FpcmUgZGUgcsOpcMOpdGVyIMOgIHBsdXMgZCd1bmUgcmVwcmlzZSkuIExlIGZpY2hpZXIgc2VyYSBlbnJlZ2lzdHLDqSB1bmUgZGVybmnDqHJlIGZvaXMgZXQgbGUgbG9naWNpZWwgc2VyYSAgbWFpbnRlbmFudCBiZWwgZXQgYmllbiBmZXJtw6kuDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgMTMuIFF1ZWxxdWVzIHJlY2V0dGVzIHBvdXIgZmFpcmUgZHVyZXIgbGUgcGxhaXNpcg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBFeHRyYWlyZSBzZXVsZW1lbnQgY2VydGFpbnMgY2FyYWN0w6hyZXMgc2Vsb24gbGV1ciBwb3NpdGlvbg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpFeHRyYWlyZSBzZXVsZW1lbnQgbGVzIGNhcmFjdMOocmVzIGRlIDUgw6AgNyAgDQoNCi0gdmFsdWVbNSwgN10NCg0KRXh0cmFpcmUgbGVzIGNhcmFjdMOocmVzIMOgIHBhcnRpciBkZSA1ICANCg0KLSB2YWx1ZS5zdWJzdHJpbmcoNSkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTYXZvaXIgc2kgdW5lIGNvbmRpdGlvbiBlc3QgdnJhaWUgb3UgZmF1c3NlPw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXN0LWNlIHF1ZSBsZSBjb250ZW51IGRlcyB2YWxldXJzIGNvcnJlc3BvbmQgw6AgIjIwMTktMDEtMDEiICANCg0KLSB2YWx1ZT09IjIwMTktMDEtMDEiDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29ubmHDrnRyZSBsYSBsb25ndWV1ciBkZXMgdmFsZXVycyBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLmxlbmd0aCgpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcHRlciBsZSBub21icmUgZGUgbW90cyBkYW5zIGRlcyBjZWxsdWxlcyAoc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUuc3BsaXQoIiAiKS5sZW5ndGgoKSBvdSB2YWx1ZS5zcGxpdCgvXHMvKS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENhbGN1bCBkJ3VuIHBvdXJjZW50YWdlIGFycm9uZGkgKGV4IGQndW4gcsOpc3VsdGF0IHN1ciAxMCkNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gcm91bmQoKHZhbHVlKjEwMCkgLyAxMCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmFuc2Zvcm1lciB1biBmb3JtYXQgZGF0ZSBlbiBmb3JtYXQgdGV4dGUgcGx1cyBsaXNpYmxlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnRvU3RyaW5nKCJkZCBNTU1NIHl5eXkiKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBMYSBjcsOpYXRpb24gZXQgbWFuaXB1bGF0aW9uIGRlIGxpc3RlcyAoKmFycmF5KikgLSBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gZm9uY3Rpb24gZCd1biBzw6lwYXJhdGV1ciBwb3VyIG5lIGNvbnNlcnZlciBxdWUgbGUgcHJlbWllciDDqWzDqW1lbnQgICAgDQoNCi0gdmFsdWUuc3BsaXQoIiAiKVswXQ0KDQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBwb3VyIGxlIHLDqW9yZG9ubmVyIA0KDQotIHZhbHVlLnNwbGl0KCIsIikucmV2ZXJzZSgpLmpvaW4oIiwiKQ0KDQotIHZhbHVlLnNwbGl0KCIsIikuc29ydCgpLmpvaW4oIiwiKQ0KDQpEaXZpc2VyIGFwcsOocyBsZXMgMyBwcmVtaWVycyBjYXJhY3TDqHJlcyBldCBjb25zZXJ2ZXIgbGUgcHJlbWllciDDqWzDqW1lbnQgIA0KDQotIHZhbHVlLnNwbGl0QnlMZW5ndGhzKDMpWzBdIA0KDQpEaXZpc2VyIHNlbG9uIGxlIHR5cGUgZGUgY2FyYWN0w6hyZXMgZXQgcmV0ZW5pciBsZSBkZXV4acOobWUgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5Q2hhclR5cGUoKVsxXQ0KDQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBzdXIgdW4gdGVybWUgeCBldCBjb25zZXJ2ZXIgbGUgY29udGVudSBwcsOpY8OpZGVudCANCg0KLSB2YWx1ZS5wYXJ0aXRpb24oInRlcm1lIilbMF0NCg0KLSB2YWx1ZS5wYXJ0aXRpb24oIiB0byAiKVsyXS5wYXJ0aXRpb24oIiBvbiAiKVswXQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSW52ZXJzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBldCBpbnZlcnNlciBsJ29yZHJlIGRlIHByw6lzZW50YXRpb24gZW4gYWpvdXRhbnQgdW5lIHZpcmd1bGUgZW50cmUgbGVzIGRldXggIA0KDQotIHZhbHVlLnNwbGl0KCcgJylbMV0gKyAiLCIgKyAiICIgKyB2YWx1ZS5zcGxpdCgnICcpWzBdDQoNCk9VDQoNCi0gdmFsdWUubWF0Y2goLyguKiksKC4qKS8pLnJldmVyc2UoKS5qb2luKCIgIikNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFqb3V0ZXIgdW4gesOpcm8gcG91ciBhdm9pciB1biBub21icmUgZGUgY2FyYWN0w6hyZXMgcHLDqWNpcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KQWpvdXRlciB1biB6w6lybyBkZXZhbnQgbGUgY29udGVudSBzaSBkb25uZSB1bmUgY2hhaW5lIGRlIDAgw6AgMiBjYXJhY3TDqHJlcyAgDQoNCi0gIjAiWzAsMi1sZW5ndGgodmFsdWUpXSArIHZhbHVlDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQXBwbGlxdWVyIGRlcyBjb25kaXRpb25zDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpGb25jdGlvbiBpZiAtIG3Dqm1lIGNob3NlIHF1ZSBkYW5zIGV4Y2VsICANCg0KLSBpZih0ZXN0LCBzaSB0ZXN0IGVzdCB2cmFpLCBzaSB0ZXN0IGVzdCB2cmFpKQ0KDQpTaSBsYSBjZWxsdWxlIGNvbnRpZW50IHgsIMOpY3JpcmUgeCwgc2lub24geQ0KDQotIGlmKHZhbHVlLmNvbnRhaW5zKCJ4IiksICJ4IiwgInkiKQ0KIA0KLSBpZih2YWx1ZS5jb250YWlucygiMSIpLCB2YWx1ZSwgbnVsbCkNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXBhcmVyIGRldXggY29sb25uZXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCklkZW50aWZpZXIgc2kgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZSBlc3QgcGFyZWlsIMOgIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUgPT0gY2VsbHNbJ2F1dHJlLWNvbG9ubmUnXS52YWx1ZQ0KDQpFc3QtY2UgcXVlIGxlIHByZW1pZXIgY2FyYWN0w6hyZSBkZSBsYSBjb2xvbm5lIHggZXN0IGxlIG3Dqm1lIHF1ZSBsYSBjb2xvbm5lIHkgIA0KDQotIGNlbGxzWyJjb2xvbm5lMSJdLnZhbHVlWzBdID09IGNlbGxzWyJjb2xvbm5lMiJdLnZhbHVlWzBdDQoNCkNvbXBhcmVyIGxlIGNvbnRlbnUgZGUgZGV1eCBjb2xvbm5lcyBldCBtb2RpZmllciBsZXMgdmFsZXVycyBzZWxvbiBsZSByw6lzdWx0YXQgZGUgbGEgY29uZGl0aW9uICANCg0KLSBpZihjZWxsc1siY29sb25uZTEiXS52YWx1ZSA9PSBjZWxsc1siY29sb25uZTIiXS52YWx1ZSwgIlBhcmVpbCIsICJQYXMgcGFyZWlsIikNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBWw6lyaWZpZXIgbGUgZm9ybWF0IGQndW5lIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSB2YWx1ZS50eXBlKCkgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEZhaXJlIGRlcyBjYWxjdWxzIHNpbXBsZXMgKHZhbGV1cnMgbnVtw6lyaXF1ZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClNvbW1lIGQndW5lIGNvbG9ubmUgcGx1cyB1bmUgYXV0cmUgIA0KDQotIHZhbHVlICsgY2VsbHNbJ0pvdXIgZHUgbW9pcyddLnZhbHVlDQoNCkFycm9uZGlyIGxlIGNvbnRlbnUgIA0KDQotIHJvdW5kKHZhbHVlKQ0KPC9kaXY+DQoNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgUmVwcmVuZHJlIGV0IGNvbmNhdMOpbmVyIGxlIGNvbnRlbnUgZCd1bmUgYXV0cmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGVuIGZ1c2lvbm5hbnQgbGUgY29udGVudSBkZSBkZXV4IGF1dHJlcyBldCBham91dGVyIGR1IHRleHRlICANCg0KLSBjZWxsc1snbm9tJ10udmFsdWUgKyBjZWxsc1snbm9tJ10udmFsdWUgKyAiQm9uam91ciEiDQoNCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBhdmVjIGxlcyB0cm9pcyBwcmVtaWVycyBjYXJhY3TDqHJlcyBzZXVsZW1lbnQgIA0KDQotIGNlbGxzWydTeW1wdG9tZSddLnZhbHVlWzAsM10NCg0KVHJhbnNmb3JtZXIgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIGVuIGNvbmNhdMOpbmFudCBsZSBjb250ZW51IGQndW5lIGF1dHJlICANCg0KLSB2YWx1ZSArICcgJyArIGNlbGxzWydzdHJlZXQtdHlwZSddLnZhbHVlDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgUmVtcGxhY2VyIGRlcyBjYXJhY3TDqHJlcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpSZW1wbGFjZXIgdG91dCBsZSBjb250ZW51IGQndW5lIGNvbG9ubmUgKGljaSwgdmlkZXIgbGEgY29sb25uZSkgIA0KDQotIHZhbHVlLnJlcGxhY2UodmFsdWUsICIiKQ0KDQpSZW1wbGFjZXIgdW5lIGxldHRyZSBwYXIgdW5lIGF1dHJlICANCg0KLSB2YWx1ZS5yZXBsYWNlQ2hhcnMoIm8iLCAiYSIpDQoNCkZhaXJlIHBsdXNpZXVycyByZW1wbGFjZW1lbnRzIGQndW4gY291cCAgDQoNCi0gdmFsdWUucmVwbGFjZSgiMSIsICJ1biIpLnJlcGxhY2UoIjIiLCAiZGV1eCIpLnJlcGxhY2UoIjMiLCAidHJvaXMiKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIElkZW50aWZpZXIgZGVzIGNlbGx1bGVzIHF1aSBjb21tZW5jZW50IHBhci4uLiAocsOpc3VsdGF0IGJvb2zDqWVuKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIHZhbHVlLnN0YXJ0c1dpdGgoIkJlcnJpIikgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU3VwcHJpbWVyIHVuIGNhcmFjdMOocmUgZGUgZMOpYnV0IG91IGZpbiBkZSB2YWxldXI6DQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClN1cHByaW1lIOKAnFPigJ0gZHUgZMOpYnV0IGRlIGxhIGNlbGx1bGUgIA0KDQotIHZhbHVlLnJlcGxhY2UoL15TLywiIikgW3JlZ2V4IF4gaW5kaXF1ZSBsZSBkw6lidXQgZCd1bmUgY2VsbHVsZV0NCg0KU3VwcHJpbWUgIi4iIMOgIGxhIGZpbiBkZSBsYSBjZWxsdWxlICANCg0KLSB2YWx1ZS5yZXBsYWNlKC9cLiQvLCIiKSBbcmVnZXggJCBpbmRpcXVlIGxhIGZpbiBkJ3VuZSBjZWxsdWxlXQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCk1vZGlmaWVyL3N1cHByaW1lciBsYSBwb25jdHVhdGlvbg0KDQotIHZhbHVlLnJlcGxhY2UoL1xwe1B1bmN0fS8sJyAnKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhdmFpbGxlciBhdmVjIHVuIGZvcm1hdCBkYXRlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpFeHRyYWlyZSBzZXVsZW1lbnQgdW5lIHBhcnRpZSBkJ3VuZSBkYXRlICANCg0KLSB2YWx1ZS50b0RhdGUoKS5kYXRlUGFydCgieWVhciIpICANCg0KLSAgZGlmZihub3coKSx2YWx1ZSwnd2Vla3MnKSAgDQoNCjwvZGl2Pg0KDQoNCioqKg0KDQoNCiMgMTQuIFJlc3NvdXJjZXMNCg0KLSBbU2l0ZSBldCBkb2N1bWVudGF0aW9uIG9mZmljaWVsc10oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy8pDQoNCi0gSm9obiBMaXR0bGUsIDIwMTgsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9saWJqb2huLmdpdGh1Yi5pby9vcGVucmVmaW5lL2luZGV4Lmh0bWwpICANCg0KLSBFdmFuIFdpbGwsIDIwMjEsIFtHZXQgU3RhcnRlZCB3aXRoIE9wZW5SZWZpbmU6IEV4cGxvcmUsIENsZWFuLCBhbmQgVHJhbnNmb3JtIHlvdXIgRGF0YSFdKGh0dHBzOi8vZXZhbndpbGwuZ2l0aHViLmlvL29wZW5yZWZpbmUtYi8pICANCg0KLSBVQ0xBLCAyMDE5LCBbR2V0dGluZyBzdGFydGVkIHdpdGggT3BlblJlZmluZSBEaWdpdGFsIEh1bWFuaXRpZXMgMjAxXShodHRwOi8vbWlyaWFtcG9zbmVyLmNvbS9jbGFzc2VzL2RoMjAxdzE5L3R1dG9yaWFscy1ndWlkZXMvZGF0YS1jbGVhbmluZy1hbmQtbWFuaXB1bGF0aW9uL2dldHRpbmctc3RhcnRlZC13aXRoLW9wZW5yZWZpbmUvKQ0KDQotIFtSZWZpbmVQcm8gS25vd2xlZGdlIEJhc2UgZm9yIE9wZW5SZWZpbmVdKGh0dHBzOi8va2IucmVmaW5lcHJvLmNvbS8pDQoNCi0gU2V0aCB2YW4gSG9vbGFuZCwgUnViZW4gVmVyYm9yZ2gsIGFuZCBNYXggRGUgV2lsZGUsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9wcm9ncmFtbWluZ2hpc3Rvcmlhbi5vcmcvZW4vbGVzc29ucy9jbGVhbmluZy1kYXRhLXdpdGgtb3BlbnJlZmluZSkNCg0KLSBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHBzOi8vZG9hbmEuZ2l0Ym9va3MuaW8vdGVzdC9jb250ZW50LykNCg0KLSBEYXRhIENhcnBlbnRyeSwgW0RhdGEgQ2xlYW5pbmcgd2l0aCBPcGVuUmVmaW5lIGZvciBFY29sb2dpc3RzXShodHRwczovL2RhdGFjYXJwZW50cnkub3JnL09wZW5SZWZpbmUtZWNvbG9neS1sZXNzb24vMDAtZ2V0dGluZy1zdGFydGVkL2luZGV4Lmh0bWwpDQoNCi0gT3dlbiBTdGVwaGVucywgMjAxNCwgW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwOi8vd3d3Lm1lYW5ib3lmcmllbmQuY29tL292ZXJkdWVfaWRlYXMvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEvSW50cm9kdWN0aW9uLXRvLU9wZW5SZWZpbmUtaGFuZG91dC1DQy1CWS5wZGYpDQoNCi0gVmVyYm9yZ2ggZXQgRGUgV2lsZGUsIDIwMTMsIFtVc2luZyBPcGVuUmVmaW5lXShodHRwczovL3d3dy5nYmlmLmVzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzAxL1VzaW5nLU9wZW5SZWZpbmVCb29rLnBkZikNCg0KLSBbTGlicmFyeSBDYXJwZW50cnk6IE9wZW5SZWZpbmVdKGh0dHBzOi8vbGlicmFyeWNhcnBlbnRyeS5vcmcvbGMtb3Blbi1yZWZpbmUvMDEtaW50cm9kdWN0aW9uL2luZGV4Lmh0bWwpDQoNCi0gW0dyYXRlZnVsIERhdGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHl0aGVyZWQvZ3JhdGVmdWxkYXRhL3dpa2kpICANCg0KLSBbRGF2aWQgSHV5bmgsIEdvb2dsZSBSZWZpbmVdKGh0dHA6Ly93d3cuZGF2aWRodXluaC5uZXQvc3BhY2VzL25pY2FyMjAxMS90dXRvcmlhbC5wZGYpDQoNCi0gW09wZW4gUmVmaW5lIEZPciBMaWJyYXJpYW5zXShodHRwOi8vbGl3b25nLmJsb2dzcG90LmNvbS8pDQoNCi0gW0NoZWF0IFNoZWV0OiBSZWd1bGFyIEV4cHJlc3Npb25zICYgR1JFTF0oaHR0cHM6Ly9jb2RlNGxpYnRvcm9udG8uZ2l0aHViLmlvLzIwMTgtMTAtMTItYWNjZXNzL0dvb2dsZVJlZmluZUNoZWF0U2hlZXRzLnBkZikNCg0KLSAqUmVjaXBlcyo6IFtPcGVuIFJlZmluZSBmb3IgTGlicmFyaWFuc10oaHR0cDovL2xpd29uZy5ibG9nc3BvdC5jb20vc2VhcmNoL2xhYmVsL3JlY2lwZSkNCg0KLSBbR1JFTCBSZWNpcGVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvUmVjaXBlcykNCg0KLSBbRXRjIV0oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0V4dGVybmFsLVJlc291cmNlcykNCg0KDQo8c3R5bGU+DQoucmlnaHQgew0KIGZsb2F0OiByaWdodDsNCn0NCg0KLmNlbnRlciB7DQogYWxpZ246IGNlbnRlcjsNCn0NCg0KLm5vdGUgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsNCiAgYm9yZGVyLWNvbG9yOiBncmVlbjsNCiAgYm9yZGVyLXdpZHRoOiB0aGluOw0KICBmb250LXNpemU6IDkwJTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDEgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogI2UwZWJlYjsNCiAgY29sb3I6IGJsYWNrOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQouYm94MiB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBiYWNrZ3JvdW5kOiAjOTJiOWI5Ow0KICBjb2xvcjogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQouY2VudGVyIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQoudGl0bGUgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGNvbG9yOiAjMDAzMzY2Ow0KfQ0KDQouc3VidGl0bGUgew0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgbGVnZW5kIHsNCiAgY29sb3I6ICM1QTdCOUM7DQp9DQoNCjwvc3R5bGU+